Example #1
0
        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));
        }