public async Task CreateConsumerUser(UserRequestModel userRequestModel) { var user = UserMapper.Map(userRequestModel); user.Id = Guid.NewGuid(); user.PasswordHash = Helper.HashPassword(userRequestModel.Password); user.UserType = (int)UserType.Consumer; await foodAppDbContext.AddAsync(user); await foodAppDbContext.SaveChangesAsync(); }
public async Task <Guid> CreateFoodAsync(FoodRequestModel foodRequestModel) { var food = FoodMapper.Map(foodRequestModel); food.Id = Guid.NewGuid(); await foodAppDbContext.AddAsync(food); await foodAppDbContext.SaveChangesAsync(); return(food.Id); }
public async Task <(BadRequestResponseModel, Guid)> CreateOrder(OrderRequestModel orderRequestModel, Guid userId) { Guid orderId = Guid.Empty; var restuarant = await this.foodAppDbContext.Restaurants.AsNoTracking().FirstOrDefaultAsync(x => x.Id == orderRequestModel.RestaurantId); if (restuarant == null) { return(new BadRequestResponseModel() { ErrorMessage = "Invalid RestaurantId" }, orderId); } var restuarantFoodCategoryIds = await this.foodAppDbContext.RestaurantFoodCategoryMaps.AsNoTracking() .Include(x => x.FoodCategory) .Where(x => x.RestaurantId == orderRequestModel.RestaurantId) .Select(x => x.FoodCategory.Id) .ToListAsync(); var restaurantFoods = await this.foodAppDbContext.Foods.AsNoTracking() .Where(x => restuarantFoodCategoryIds.Any(r => r == x.FoodCategoryId)) .ToListAsync(); var restaurantFoodIds = restaurantFoods.Select(x => x.Id).ToList(); var orderRequestFoodIds = orderRequestModel.OrderLines.Select(x => x.FoodId).ToList(); var foodCustomizationIds = await this.foodAppDbContext.FoodCategoryCustomizationMaps.AsNoTracking() .Where(x => restuarantFoodCategoryIds.Any(r => r == x.FoodCategoryId)) .Select(x => x.FoodCustomizationId) .ToListAsync(); var foodCustomizationOptions = await this.foodAppDbContext.FoodCustomizationOptions.AsNoTracking() .Where(x => foodCustomizationIds.Any(f => f == x.FoodCustomizationId)) .ToListAsync(); bool isFoodIdValid = !orderRequestFoodIds.Except(restaurantFoodIds).Any(); if (!isFoodIdValid) { return(new BadRequestResponseModel() { ErrorMessage = "FoodId doesnt belong to selected restaurant" }, orderId); } using (var transaction = foodAppDbContext.Database.BeginTransaction()) { try { var order = OrderMapper.Map(orderRequestModel, userId); orderId = order.Id; var orderLines = new List <OrderLine>(); var orderLineOptions = new List <OrderLineOption>(); var totalAmount = 0.00m; foreach (var orderLineRequest in orderRequestModel.OrderLines) { var food = restaurantFoods.FirstOrDefault(x => x.Id == orderLineRequest.FoodId); var orderLine = OrderMapper.Map(orderLineRequest, order.Id, food.UnitPrice); orderLines.Add(orderLine); totalAmount += (orderLineRequest.Quantity * food.UnitPrice); foreach (var orderLineOptionRequest in orderLineRequest.OrderLineOptions) { var foodCustomizationOption = foodCustomizationOptions.FirstOrDefault(x => x.Id == orderLineOptionRequest.FoodCustomizationOptionId); orderLineOptions.Add(OrderMapper.Map(orderLineOptionRequest, orderLine.Id, foodCustomizationOption.UnitPrice)); totalAmount += foodCustomizationOption.UnitPrice; } } order.TotalAmount = totalAmount; await foodAppDbContext.AddAsync(order); await foodAppDbContext.SaveChangesAsync(); await foodAppDbContext.AddRangeAsync(orderLines); await foodAppDbContext.SaveChangesAsync(); await foodAppDbContext.AddRangeAsync(orderLineOptions); await foodAppDbContext.SaveChangesAsync(); await transaction.CommitAsync(); } catch (Exception) { await transaction.RollbackAsync(); throw; } } return(null, orderId); }