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