Exemplo n.º 1
0
        public async Task <IActionResult> Update(string id,
                                                 [Bind("Id,StartingAt,FinishingAt,OwnerEmail,BuyersBid")]
                                                 AuctionBidViewModel auctionBidViewModel)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.GetUserAsync(User);

                var auctionsTableEntity = await _repository.GetEntityAsync <AuctionsTableEntity>(StorageTablesNames.Auctions,
                                                                                                 id, AuctionAppConstants.AuctionsTablePartitionKey);

                if (auctionsTableEntity.BiddersCollection.ContainsKey(user.Email))
                {
                    auctionsTableEntity.BiddersCollection[user.Email] = auctionBidViewModel.BuyersBid;
                }
                else
                {
                    auctionsTableEntity.BiddersCollection.Add(user.Email, auctionBidViewModel.BuyersBid);
                }

                await _repository.InsertOrReplaceEntityAsync(StorageTablesNames.Auctions, auctionsTableEntity);

                return(RedirectToAction("Search", "Auction"));
            }

            return(View(auctionBidViewModel));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Create([FromBody] AuctionBidViewModel bidViewModel)
        {
            var userId = GetUserId();
            var result = await _bidService.PlaceBid(bidViewModel, userId);

            if (result.IsSuccess)
            {
                return(OkResult <object>(null, "Bid placed"));
            }
            else
            {
                return(BadResult(result.Errors));
            }
        }
Exemplo n.º 3
0
        public async Task Should_Reject_Bid_If_User_Id_Are_Not_The_Same()
        {
            var bid = new AuctionBidViewModel()
            {
                ItemId   = "TEST_ITEM_ID",
                UserId   = "TEST_USER_ID",
                BidPrice = 9999
            };

            var result = await _bidService.PlaceBid(bid, "OTHER_USER_ID");

            result.IsSuccess.ShouldBeFalse();
            result.Errors.ShouldContain("discrepancy in userId");
        }
Exemplo n.º 4
0
        public async Task Should_Reject_Bid_If_Validation_For_item_Fail()
        {
            var bid = new AuctionBidViewModel()
            {
                ItemId   = "TEST_ITEM_ID",
                UserId   = "TEST_USER_ID",
                BidPrice = 9999
            };

            MockGetListByItemIdWithMaxBidPrice(1000, bid.ItemId);
            MockValidateItemForBiddingWithResult(false);
            var result = await _bidService.PlaceBid(bid, bid.UserId);

            result.IsSuccess.ShouldBeFalse();
            result.Errors.ShouldContain("test item validation error");
        }
Exemplo n.º 5
0
        public async Task Should_Reject_Bid_If_Not_Highest()
        {
            var bid = new AuctionBidViewModel()
            {
                ItemId   = "TEST_ITEM_ID",
                UserId   = "TEST_USER_ID",
                BidPrice = 9999
            };

            MockGetListByItemIdWithMaxBidPrice(10000, bid.ItemId);
            MockValidateItemForBiddingWithResult(true);
            var result = await _bidService.PlaceBid(bid, bid.UserId);

            result.IsSuccess.ShouldBeFalse();
            result.Errors.ShouldContain("Your price need to be higher than the other bids.");
        }
Exemplo n.º 6
0
        public async Task <ServiceResult> PlaceBid(AuctionBidViewModel bidViewModel, string userId)
        {
            var result = new ServiceResult();

            if (bidViewModel.UserId != userId)
            {
                result.Errors.Add("discrepancy in userId");
                return(result);
            }

            var validationResult = await _itemServiceApiClient.ValidateItemForBidding(bidViewModel.ItemId);

            if (!validationResult.Data)
            {
                result.Errors.AddRange(validationResult.Errors);
                return(result);
            }

            var bids = _auctionBidRepository.GetListByItemId(bidViewModel.ItemId);

            if (bids.Any() && bidViewModel.BidPrice <= bids.Max(x => x.BidPrice))
            {
                result.Errors.Add("Your price need to be higher than the other bids.");
                return(result);
            }

            var bid = _mapper.Map <AuctionBidViewModel, AuctionBid>(bidViewModel);

            bid.Id = Guid.NewGuid().ToString();
            bid.CreatedDateTime = DateTime.Now;
            await _auctionBidRepository.Create(bid);

            var @event = new Event <BidPlacedForItemEventData>()
            {
                Data = new BidPlacedForItemEventData()
                {
                    ItemId = bid.ItemId, UserId = bid.UserId, BidPrice = bid.BidPrice
                }, EventName = BidPlacedForItemEventData.EventName
            };

            @event.TargetQueues.Add(QueueConstants.ItemQueue);

            _jobService.PublishEvent(@event);

            return(result);
        }
Exemplo n.º 7
0
        public async Task Should_Create_Place_Bid()
        {
            var bid = new AuctionBidViewModel()
            {
                ItemId   = "TEST_ITEM_ID",
                UserId   = "TEST_USER_ID",
                BidPrice = 9999
            };

            MockGetListByItemIdWithMaxBidPrice(1000, bid.ItemId);
            MockValidateItemForBiddingWithResult(true);
            var result = await _bidService.PlaceBid(bid, bid.UserId);

            result.IsSuccess.ShouldBeTrue();

            await _mockItemServiceApiClient.Received(1).ValidateItemForBidding(Arg.Is <string>(x => x == bid.ItemId));

            await _mockAuctionBidRepository.Received(1).Create(Arg.Is <AuctionBid>(x => !string.IsNullOrEmpty(x.Id) && x.ItemId == bid.ItemId && x.UserId == bid.UserId && x.BidPrice == bid.BidPrice));

            _mockJobService.Received(1).PublishEvent(Arg.Is <Event <BidPlacedForItemEventData> >(
                                                         e => e.EventName == BidPlacedForItemEventData.EventName && e.Data.ItemId == bid.ItemId && e.Data.UserId == bid.UserId && e.Data.BidPrice == bid.BidPrice));
        }
Exemplo n.º 8
0
        public async Task <IActionResult> Update(string id)
        {
            var user = await _userManager.GetUserAsync(User);

            var auctionsTableEntity = await _repository.GetEntityAsync <AuctionsTableEntity>(StorageTablesNames.Auctions,
                                                                                             id, AuctionAppConstants.AuctionsTablePartitionKey);

            var auctionBidViewModel = new AuctionBidViewModel
            {
                Id        = id,
                BuyersBid = auctionsTableEntity.BiddersCollection.ContainsKey(user.Email)
                    ? auctionsTableEntity.BiddersCollection[user.Email]
                    : 0,
                StartingAt  = auctionsTableEntity.StartingAt,
                FinishingAt = auctionsTableEntity.FinishingAt,
                ItemName    = auctionsTableEntity.Item.Name,
                OwnerEmail  = auctionsTableEntity.OwnerEmail,
                Status      = auctionsTableEntity.Status
            };

            return(View(auctionBidViewModel));
        }