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); }