Ejemplo n.º 1
0
        protected override Task <RequestStatus> HandleCommand(BuyNowCommand request, CancellationToken cancellationToken)
        {
            var user = _userRepository.FindUser(request.SignedInUser);

            if (user == null)
            {
                _logger.LogError("BuyNowCommandHandler cannot find user {@user}", request.SignedInUser);
                throw new CommandException($"Cannot find user: {user.UserIdentity}");
            }

            var auction = _auctionRepository.FindAuction(request.AuctionId);

            if (auction == null)
            {
                throw new CommandException($"Invalid auction id: {request.AuctionId}");
            }

            var buyNowService = new BuyNowService(_userRepository);

            var generatedEvents = buyNowService.BuyNow(auction, user);

            generatedEvents.AddRange(auction.PendingEvents);
            generatedEvents.AddRange(user.PendingEvents);

            _auctionRepository.UpdateAuction(auction);
            _userRepository.UpdateUser(user);

            _eventBusService.Publish(generatedEvents, request.CommandContext.CorrelationId, request);

            return(Task.FromResult(RequestStatus.CreateFromCommandContext(request.CommandContext, Status.PENDING)));
        }
Ejemplo n.º 2
0
        public void SetUp()
        {
            auction = AuctionTestUtils.CreateAuction();
            for (int i = 0; i < users.Length; i++)
            {
                users[i] = AuctionTestUtils.CreateUser();
            }


            var mockRepo = new Mock <IUserRepository>();

            mockRepo.Setup(r => r.FindUser(It.IsAny <UserIdentity>())).Returns <UserIdentity>(identity =>
            {
                return(auction.Bids.Where(bid => bid.UserIdentity.UserId.Equals(identity.UserId))
                       .Select(bid => bid.UserIdentity)
                       .Select(userIdentity =>
                               users.First(user => user.UserIdentity.UserId.Equals(userIdentity.UserId)))
                       .FirstOrDefault());
            });

            service = new BuyNowService(mockRepo.Object);
        }