public async Task <AuctionItem> PostBidOnAuction(Bid bid) { Console.WriteLine("bid started"); var starttime = new Stopwatch(); starttime.Start(); bid.Bidder = await usersRepository.GetUserWithoutIncludes(bid.BidderID); bid.Auction = await auctionsRepository.GetAuction(bid.AuctionID); var highestbid = FindHighestBid(bid.Auction); if (highestbid != null) { var highestbidvalue = highestbid.BiddedAmount; double refund = (highestbid.BidderID == bid.BidderID) ? highestbidvalue : 0; if (checkValidBid(bid)) { if (highestbid.BidderID != bid.BidderID) { highestbid.Bidder = await usersRepository.GetUser(highestbid.BidderID); await usersRepository.AddCashToUser(highestbid.Bidder, highestbidvalue); } await bidsRepository.PostBid(bid); await usersRepository.WithdrawFromUser(bid.Bidder, bid.BiddedAmount); } } else if (checkValidBid(bid)) { await bidsRepository.PostBid(bid); await usersRepository.WithdrawFromUser(bid.Bidder, bid.BiddedAmount); } else { throw new ArgumentException($"Bidded amount must be higher than current highest bid or the bid has not started or ended!"); } starttime.Stop(); Console.WriteLine("Time: " + starttime.Elapsed); return(ConvertAuctionToAuctionItem(bid.Auction)); }