Beispiel #1
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;
            }));
        }
Beispiel #2
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();
            }
        }
        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;
            }));
        }