Пример #1
0
        public async Task <IActionResult> Create([FromBody] CreateBasketDto basket)
        {
            var response = await _service.CreateBasketAsync(basket);

            if (!response.Success)
            {
                return(BadRequest(response));
            }

            return(Ok(response));
        }
Пример #2
0
        public async Task <ServiceResponse <GetBasketDto> > CreateBasketAsync(CreateBasketDto createBasketDto)
        {
            var response = new ServiceResponse <GetBasketDto>();

            try
            {
                var basket = _mapper.Map <Basket>(createBasketDto);
                // Check for customer if email exist
                if (createBasketDto.Email != null)
                {
                    var customer = _context.Customers.FirstOrDefault(c => c.Email == createBasketDto.Email);
                    if (customer == null)
                    {
                        // Tạo khách hàng (bỏ sau)
                        var customerDto = new CreateCustomerDto
                        {
                            Email    = createBasketDto.Email,
                            FullName = createBasketDto.FullName,
                            Gender   = Gender.Unknown,
                            Address  = createBasketDto.Address
                        };
                        var createNewCustomerResult = await _customerService.CreateCustomerAsync(customerDto);

                        if (!createNewCustomerResult.Success)
                        {
                            response.Success = false;
                            response.Message = createNewCustomerResult.Message;

                            return(response);
                        }
                        customer = await _context.Customers.FirstOrDefaultAsync(c => c.Id == createNewCustomerResult.Data.Id);
                    }
                    basket.Customer = customer;
                }
                // Add basket item

                await _context.Baskets.AddAsync(basket);

                var getBasketDto = _mapper.Map <GetBasketDto>(basket);

                var TotalPrice = 0;

                foreach (CreateBasketItemDto createBasketItem in createBasketDto.Items)
                {
                    var newBasketItem = await _basketItemService.CreateBasketItemAsync(createBasketItem, basket);

                    TotalPrice += newBasketItem.Data.Price;
                }

                basket.TotalPrice = TotalPrice;
                basket.IsPaid     = false;
                basket.Status     = BasketStatus.Ordering;

                _context.BasketLogs.Add(new BasketLog()
                {
                    BasketId = basket.Id,
                    Status   = basket.Status,
                });

                await _context.SaveChangeWithValidationAsync();

                response.Data = getBasketDto;

                response.Data.TotalPrice = TotalPrice;

                return(response);
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Message = ex.Message;
                response.Code    = ErrorCode.BASKET_UNEXPECTED_ERROR;

                _logger.LogError(ex.Message, ex.StackTrace);
                return(response);
            }
        }