public async Task <JsonResult> getAuctionUpdateData(int?id) { var auctionToUpdate = await _context.auctions.Include(a => a.winner).FirstOrDefaultAsync(a => a.Id == id); var bids = await _context.bids.Where(b => b.auctionId == auctionToUpdate.Id).ToListAsync(); UpdatedAuction resultAuction = new UpdatedAuction() { currentPrice = auctionToUpdate.currentPrice, RowVersion = auctionToUpdate.RowVersion, winnerUsername = auctionToUpdate.winner.UserName, numberOfBids = bids.Count }; return(Json(resultAuction)); }
public async Task <JsonResult> Bid(int?id, byte[] rowVersion) { if (id == null) { return(Json(false)); } var auctionToUpdate = await _context.auctions.Include(a => a.winner).Include(a => a.owner).FirstOrDefaultAsync(a => a.Id == id); if (auctionToUpdate == null) { return(Json(false)); } _context.Entry(auctionToUpdate).Property("RowVersion").OriginalValue = rowVersion; if (await TryUpdateModelAsync <Auction>(auctionToUpdate, "", a => a.currentPrice)) { try{ User loggedUser = await this._userManager.GetUserAsync(base.User); if (loggedUser.tokens <= 0) { return(Json("ERROR")); } auctionToUpdate.currentPrice += incCurrentPrice; auctionToUpdate.winner = loggedUser; auctionToUpdate.winnerId = loggedUser.Id; Bid bid = new Bid() { price = auctionToUpdate.currentPrice, bidDate = DateTime.Now, user = loggedUser, userId = loggedUser.Id, auctionId = auctionToUpdate.Id }; _context.Add(bid); loggedUser.tokens -= 1; await _context.SaveChangesAsync(); auctionToUpdate = await _context.auctions.Include(a => a.winner).Include(a => a.bids).FirstOrDefaultAsync(a => a.Id == id); UpdatedAuction resultAuction = new UpdatedAuction() { currentPrice = auctionToUpdate.currentPrice, RowVersion = auctionToUpdate.RowVersion, winnerUsername = auctionToUpdate.winner.UserName, numberOfBids = auctionToUpdate.bids.Count() }; return(Json(resultAuction)); } catch (DbUpdateConcurrencyException ex) { return(Json(ex)); } } return(Json(false)); }