예제 #1
0
        public async Task <ServiceResponse> Handle(CheckoutOrderCommand request, CancellationToken cancellationToken)
        {
            var           orderDetails = request.Items;
            CustomerOrder newOrder     = new CustomerOrder();
            var           service      = new ServiceResponse();

            if (request != null)
            {
                var orderEntity = _mapper.Map <CustomerOrder>(request);
                orderEntity.OrderNumber = GenerateOrderNumber();
                orderEntity.OrderStatus = Status.Created.ToString();
                newOrder = await _orderRepository.AddAsync(orderEntity);

                var newOrderLine = new OrderLines();

                if (orderDetails != null)
                {
                    newOrderLine = await _orderRepository.AddAsyncOrderLine(new OrderLines
                    {
                        OrderID   = newOrder.Id.ToString(),
                        Name      = orderDetails.Make,
                        ProductID = orderEntity.ProductID
                    });
                }


                var stockMessage = new StockEvent
                {
                    OrderID      = newOrder.Id.ToString(),
                    OrderNumber  = orderEntity.OrderNumber,
                    ProductID    = newOrderLine.ProductID,
                    OrderStatus  = orderEntity.OrderStatus,
                    EmailAddress = orderEntity.EmailAddress,
                    LastName     = orderEntity.LastName,
                    FirstName    = orderEntity.FirstName,
                    IDNumber     = orderEntity.IDNumber,
                };

                service.Message = $"Order {newOrder.Id} is successfully created. with reference number {orderEntity.OrderNumber}";
                await _publishEndpoint.Publish <StockEvent>(stockMessage);
            }

            _logger.LogInformation($"Order {newOrder.Id} is successfully created.");
            _logger.LogInformation($"Inventory check for {newOrder.Id} is successfully sent.");

            await SendMail(newOrder);

            return(service);
        }