public async Task <IActionResult> Create([FromBody] CreateBasketDto basket) { var response = await _service.CreateBasketAsync(basket); if (!response.Success) { return(BadRequest(response)); } return(Ok(response)); }
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); } }