public IQueryable <VoteModel> GetVotes(int codeJewelId)
        {
            return(this.ProcessAndHandleExceptions(() =>
            {
                if (codeJewelId <= 0)
                {
                    throw new ArgumentOutOfRangeException("codeJewelId", "id of code hewel must be positive number");
                }

                var context = new CodeJewelsDb();
                var votes = context.Votes.Where(v => v.CodeJewel.Id == codeJewelId);

                if (votes == null)
                {
                    return new List <VoteModel>().AsQueryable();
                }

                var votesModel = votes.Select(v => new VoteModel
                {
                    Id = v.Id,
                    CodeJewelId = codeJewelId,
                    IsUpVote = v.IsUpVote
                });

                return votesModel;
            }));
        }
Exemple #2
0
        // POST api/codejewels
        public HttpResponseMessage Post([FromBody] CodeJewel codeJewel)
        {
            return(this.ProcessAndHandleExceptions(() =>
            {
                Validator.ValidateCodeJewel(codeJewel);

                var dbContext = new CodeJewelsDb();

                GetOrCreateCategory(codeJewel, dbContext);

                dbContext.CodeJewels.Add(codeJewel);
                dbContext.SaveChanges();
                var codeJewelDetails = new CodeJewelDetails
                {
                    Id = codeJewel.Id,
                    Category = codeJewel.Category.Name,
                    AuthorEmail = codeJewel.AuthorEMail,
                    Code = codeJewel.Code
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, codeJewelDetails);

                var location = new Uri(this.Url.Link("DefaultApi", new { id = codeJewel.Id }));
                response.Headers.Location = location;

                return response;
            }));
        }
Exemple #3
0
        private void GetOrCreateCategory(CodeJewel codeJewel, CodeJewelsDb dbContext)
        {
            var categoryInDb = dbContext.Categories.FirstOrDefault(c => c.Name == codeJewel.Category.Name);

            if (categoryInDb != null)
            {
                codeJewel.Category = categoryInDb;
            }
            else
            {
                dbContext.Categories.Add(codeJewel.Category);
                dbContext.SaveChanges();
            }
        }
Exemple #4
0
        // GET api/codejewels
        public IQueryable <CodeJewelModel> Get()
        {
            var collection = this.ProcessAndHandleExceptions(() =>
            {
                var context = new CodeJewelsDb();
                var jewels  = context.CodeJewels.Select(c => new CodeJewelModel
                {
                    Id       = c.Id,
                    Category = c.Category.Name,
                    Code     = c.Code.Substring(0, 20),
                });

                return(jewels);
            });

            return(collection);
        }
        public HttpResponseMessage PostVote([FromUri] int codeJewelId, [FromBody] Vote vote)
        {
            return(this.ProcessAndHandleExceptions(() =>
            {
                Validator.ValidateVote(vote);

                var dbContext = new CodeJewelsDb();
                var codeJewel = dbContext.CodeJewels.Include("Category").FirstOrDefault(cj => cj.Id == codeJewelId);

                if (codeJewel == null)
                {
                    throw new ArgumentOutOfRangeException("No such Code jewel found - invalid vote");
                }

                vote.CodeJewel = codeJewel;
                dbContext.Votes.Add(vote);
                dbContext.SaveChanges();

                var voteDetails = new VoteDetails
                {
                    Id = vote.Id,
                    CodeJewel = new CodeJewelModel
                    {
                        Id = codeJewel.Id,
                        Category = codeJewel.Category.Name,
                        Code = codeJewel.Code.Length >= 20 ? codeJewel.Code.Substring(0, 20) : codeJewel.Code,
                    },
                    IsUpVote = vote.IsUpVote,
                };

                var response = this.Request.CreateResponse(HttpStatusCode.Created, voteDetails);
                var location = new Uri(this.Url.Link("CodeJewelVoteApi", new { id = vote.Id }));
                response.Headers.Location = location;

                return response;
            }));
        }