コード例 #1
0
        public async Task <CreateResult> CreateOrder(OrderForCreateDTO order)
        {
            var createResult = new CreateResult()
            {
                Result        = false,
                ResultMessage = ""
            };

            //Cart have no item to order
            if (!_cartRepo.IsCartItemExist(order.UserId))
            {
                createResult.ResultMessage = "You have no items in cart!";
                return(createResult);
            }

            Cart cart = _cartRepo.GetCartByUserId(order.UserId);
            User user = _userService.GetById(order.UserId);

            //Insert new order
            Order newOrder = new Order()
            {
                UserId         = order.UserId,
                TotalPrice     = cart.TotalPrice,
                ShippingFee    = order.ShippingFee,
                DeliveryDate   = order.DeliveryDate,
                DeliveryOption = order.DeliveryOption,
                PaymentMethod  = order.PaymentMethod,
                Status         = OrderStatus.Recorded,
                User           = user
            };
            var orderInsertResult = await _orderRepo.CreateOrder(newOrder);

            if (!orderInsertResult)
            {
                createResult.ResultMessage = "Insert new order failed!";
                return(createResult);
            }

            IEnumerable <CartItem> cartItems = await _cartItemRepo.GetByUserId(order.UserId);

            foreach (CartItem cartItem in cartItems)
            {
                //Insert order item
                OrderItem orderItem = new OrderItem()
                {
                    BookId   = cartItem.BookId,
                    Quantity = cartItem.Quantity,
                    OrderId  = newOrder.Id,
                };

                var orderItemInsertResult = await _orderItemRepo.CreateOrderItem(orderItem);

                if (!orderItemInsertResult)
                {
                    createResult.ResultMessage = "Add order item failed!";
                    return(createResult);
                }

                //Update book quantity
                var book = _bookRepo.GetBookById(cartItem.BookId);

                //Check quantity of book
                if (book.Quantity < cartItem.Quantity)
                {
                    createResult.ResultMessage = "Book's quantity is not enough!";
                    return(createResult);
                }

                book.Quantity -= cartItem.Quantity;
                var updateBookResult = await _bookRepo.UpdateBook(book, cartItem.BookId);

                if (!updateBookResult)
                {
                    createResult.ResultMessage = "Update book quantity failed!";
                    return(createResult);
                }
            }

            //Send email to user
            var mailContent = new EmailContent()
            {
                ToEmail = user.Email,
                ToName  = user.Name,
                Message = "",
                Subject = "Invoid for order"
            };
            await _emailService.SendEmailAsync(mailContent, newOrder);

            //Clear all cart item after create order
            var clearCartItemResult = _cartItemRepo.ClearAllCartItem(order.UserId);

            if (!clearCartItemResult)
            {
                createResult.ResultMessage = "Clear cart item failed!";
                return(createResult);
            }

            createResult.Result        = true;
            createResult.ResultMessage = "Create new order successfull!";
            createResult.NewOrderId    = newOrder.Id;
            return(createResult);
        }
コード例 #2
0
        public CartForListDTO GetCartByUserId(Guid userId)
        {
            var result = _mapper.Map <CartForListDTO>(_cartRepo.GetCartByUserId(userId));

            return(result);
        }