public Bid AddBid(Bid bid) { var user = databaseAdapter.GetUser(bid.UserId); if (user == null) { throw new NotFoundException("User", bid.UserId.ToString()); } var(product, existingBid) = databaseAdapter.GetProductBid(bid.ProductId); if (product == null) { throw new NotFoundException("Product", bid.ProductId.ToString()); } if (product.AuctionEnd <= DateTime.UtcNow) { throw new BadRequestException(product, "Auction expired"); } if (existingBid != null && bid.Price <= existingBid.Price) { throw new BadRequestException(bid, $"Unsupported price. Should be greater then ${existingBid.Price}"); } bid.Id = Guid.NewGuid(); databaseAdapter.AddBid(bid); return(bid); }