// 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; })); }
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; })); }