示例#1
0
        public async Task <int> Handle(CreateOrderCommandModel request, CancellationToken cancellationToken)
        {
            var user = await userQueryService.GetRawByIdAsync(request.UserId);

            var productOrders = await productOrderQueryService.CreateAsync(request.Products);

            var shipment = await shipmentQueryService.GetRawAsync(request.ShipmentId);

            var payment = await paymentsRepository.GetPaymentAsync(request.PaymentId);

            if ((shipment.Type == ShipmentType.CashOnDelivery && payment.PaymentType != PaymentType.PaymentOnDelivery) ||
                (shipment.Type != ShipmentType.CashOnDelivery && payment.PaymentType == PaymentType.PaymentOnDelivery))
            {
                throw new StreetwoodException(ErrorCode.InvalidShipmentType);
            }

            var orderDiscount = await orderDiscountQueryService.GetRawByCodeAsync(request.PromoCode);

            var address = await addressQueryService.GetAsync(request.Address, request.AddressId, request.UserId);

            var order = await orderFactory.CreateOrderAsync(user, productOrders, shipment, payment, orderDiscount, request.Comment, address);

            await emailService.SendNewOrderEmailAsync(order);

            return(order.Id);
        }
示例#2
0
        public async Task <int> Handle(AddOrderCommandModel request, CancellationToken cancellationToken)
        {
            var user = await userQueryService.GetRawByIdAsync(request.UserId);

            var productOrders = await productOrderQueryService.CreateAsync(request.Products);

            var shipment = await shipmentQueryService.GetRawAsync(request.ShipmentId);

            var orderDiscount = await orderDiscountQueryService.GetRawByCodeAsync(request.PromoCode);

            var address = await addressQueryService.GetAsync(request.Address, request.AddressId, request.UserId);

            var order = await orderCommandService.AddAsync(user, productOrders, shipment, orderDiscount, request.Comment, address);

            await emailService.SendNewOrderEmailAsync(mapper.Map <OrderDto>(order));

            return(order.Id);
        }
        public async Task <int> Handle(AddOrderCommandModel request, CancellationToken cancellationToken)
        {
            // on this level we have everything validated and checked => no validation here
            var user = await userQueryService.GetRawByIdAsync(request.UserId);

            var productOrders = await productOrderQueryService.CreateAsync(request.Products);

            var shipment = await shipmentQueryService.GetRawAsync(request.ShipmentId);

            var orderDiscount = await orderDiscountQueryService.GetRawByCodeAsync(request.PromoCode);

            var address = new Core.Domain.Entities.Address(request.Address.Street, request.Address.City,
                                                           request.Address.Country, request.Address.PostCode, request.Address.PhoneNumber);

            var orderId = await orderCommandService.AddAsync(user, productOrders, shipment, orderDiscount, request.Comment, address);

            return(orderId);
        }