public IHttpActionResult Bid(int id, BidInputModel bidData) { if (bidData == null) { return BadRequest("Missing bid data."); } if (!ModelState.IsValid) { return BadRequest(ModelState); } var offer = this.db.Offers.All() .Where(o => o.Id == id) .Select(o => new { InitialPrice = o.InitialPrice, ExpirationDateTime = o.ExpirationDateTime, Bids = o.Bids.Select(b => b.OfferedPrice) }) .FirstOrDefault(); if (offer == null) { return this.NotFound(); } if (offer.ExpirationDateTime < DateTime.Now) { return this.BadRequest("Offer has expired."); } var maxBidPrice = offer.InitialPrice; if (offer.Bids.Any()) { maxBidPrice = offer.Bids.Max(); } if (bidData.BidPrice <= maxBidPrice) { return this.BadRequest("Your bid should be > " + maxBidPrice); } var currentUserId = User.Identity.GetUserId(); var user = this.db.UserStore.FindByIdAsync(currentUserId).Result; if (user == null) { return this.Unauthorized(); } var bid = new Bid() { OfferId = id, BidderId = currentUserId, OfferedPrice = bidData.BidPrice, Comment = bidData.Comment, DateCreated = DateTime.Now }; db.Bids.Add(bid); db.SaveChanges(); return this.Ok( new { bid.Id, Bidder = user.UserName, Message = "Bid created." }); }
public IHttpActionResult PostBidById(int id, BidInputModel bidData) { if (!ModelState.IsValid || bidData == null) { return this.BadRequest(ModelState); } var bid = this.db.Offers.Find(id); if (bid == null) { return this.NotFound(); } var currentUserId = User.Identity.GetUserId(); if (currentUserId == null) { return this.Unauthorized(); } var offerDate = this.db.Offers.Where(o => o.Id == id).Select(o => o.ExpirationDate).First(); if (offerDate < DateTime.Now) { return this.BadRequest("Offer has expired."); } var bestBidPrice = this.db.Bids .OrderByDescending(b => b.Id) .Where(b => b.OfferId == id) .Select(b => b.BidPrice) .FirstOrDefault(); if (bestBidPrice >= bidData.BidPrice) { return this.BadRequest("Your bid should be > " + bestBidPrice); } var bit = new Bid() { BidderId = currentUserId, BidPrice = bidData.BidPrice, Comment = bidData.Comment, Date = DateTime.Now, OfferId = id }; this.db.Bids.Add(bit); this.db.SaveChanges(); return this.Ok(new { Id = bit.Id, Author = User.Identity.GetUserName(), Message = "Bid created." }); }