Ejemplo n.º 1
0
        public async Task <Result <Guid> > Handle(CreateConsumerOrderCommand request, CancellationToken token)
        {
            var cartProductsResult = await _orderService.GetCartProductsAsync(request.Products, token);

            if (!cartProductsResult.Succeeded)
            {
                return(Failure <Guid>(cartProductsResult));
            }

            var cartDeliveriesResult = await _orderService.GetCartDeliveriesAsync(request.ProducersExpectedDeliveries,
                                                                                  cartProductsResult.Data, token);

            if (!cartDeliveriesResult.Succeeded)
            {
                return(Failure <Guid>(cartDeliveriesResult));
            }

            Domain.User user = request.UserId.HasValue && request.UserId != Guid.Empty
                ? await _context.Users.SingleAsync(e => e.Id == request.UserId.Value, token)
                : null;

            var order = new Domain.Order(Guid.NewGuid(), request.Donation, cartProductsResult.Data,
                                         _pspOptions.FixedAmount,
                                         _pspOptions.Percent, _pspOptions.VatPercent, user);

            order.SetDeliveries(cartDeliveriesResult.Data);

            await _context.AddAsync(order, token);

            await _context.SaveChangesAsync(token);

            return(Success(order.Id));
        }