コード例 #1
0
        public void Handle(CreateOrder command)
        {
            var order = new Shop.Order.Write.Domains.Order()
            {
                CustomerId      = command.CustomerId,
                Note            = command.Note,
                DeliveryAddress = command.DeliveryAddress,
                Items           = new List <Domains.OrderItem>()
            };

            command.Items.ForEach(itm =>
            {
                order.Items.Add(new Domains.OrderItem()
                {
                    Name     = itm.Name,
                    Price    = itm.Price,
                    Quantity = itm.Quantity
                });
            });

            order.CustomerName = _customerCreditService.GetCustomerName(command.CustomerId);
            order.CalculateTotalPrice();

            var creditLimit = _customerCreditService.GetCustomerCreditLimit(command.CustomerId);

            if (order.Total > creditLimit)
            {
                throw new CreditLimitExceedException("Siparişiniz size tanımlanan kredi limitini aşmaktadır");
            }

            var result = _orderRepository.CreateOrder(order);

            if (result)
            {
                _bus.Publish <OrderCreated>("orderCreated", new OrderCreated()
                {
                    Date        = order.Date,
                    OrderId     = order.OrderId,
                    TotalAmount = order.Total
                });
            }
            else
            {
                throw new Exception("sipariş kaydedilirken bir sorun meydana geldi");
            }
        }