예제 #1
0
        public async Task <IActionResult> SupplierFoodAdd(CreateSupplierFoodCommand model)
        {
            FirebaseUser user = HttpContext.GetFirebaseUser();
            ResultWrapper <CreateSupplierFoodOutput> result = new ResultWrapper <CreateSupplierFoodOutput>();

            result = await _mediator.Send(model);

            return(Ok(result));
        }
예제 #2
0
        public Task <ResultWrapper <CreateSupplierFoodOutput> > Handle(CreateSupplierFoodCommand request, CancellationToken cancellationToken)
        {
            ResultWrapper <CreateSupplierFoodOutput> createFoodResult = new ResultWrapper <CreateSupplierFoodOutput>();

            if (!request.FoodNutritions.Any())
            {
                createFoodResult.Status  = false;
                createFoodResult.Message = "please enter nutiritions!";
                return(Task.FromResult(createFoodResult));
            }
            try
            {
                using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    TFood tFood = new TFood()
                    {
                        Title           = request.Title,
                        Image           = request.Image,
                        Tags            = request.Tags,
                        Price           = request.Price,
                        Enabled         = request.Enabled,
                        Created         = DateTime.Now,
                        TFoodTypeId     = request.FoodTypeId,
                        TUserId         = request.UserId,
                        TFoodNutritions = new List <TFoodNutrition>(),
                        TReference      = new TReference()
                        {
                            Enabled    = true,
                            RecordType = ReferenceRecordTypeEnum.FOOD
                        }
                    };
                    _dbContext.TFood.Add(tFood);
                    _dbContext.SaveChanges();
                    tFood.TReference.RecordId = tFood.Id;
                    _dbContext.TReference.Update(tFood.TReference);
                    _dbContext.SaveChanges();


                    foreach (var nutrition in request.FoodNutritions)
                    {
                        TFoodNutrition tFoodNutrition = new TFoodNutrition()
                        {
                            Amount           = nutrition.Amount,
                            Enabled          = true,
                            Created          = DateTime.Now,
                            TFoodId          = tFood.Id,
                            TNutritionId     = nutrition.Id,
                            TNutritionUnitId = nutrition.UnitId,
                            TReference       = new TReference()
                            {
                                Enabled    = true,
                                RecordType = ReferenceRecordTypeEnum.FOOD_NUTIRTION
                            }
                        };
                        _dbContext.TFoodNutrition.Add(tFoodNutrition);
                    }
                    _dbContext.SaveChanges();

                    foreach (TFoodNutrition foodNutrition in tFood.TFoodNutritions)
                    {
                        foodNutrition.TReference.RecordId = foodNutrition.Id;
                        _dbContext.TReference.Update(foodNutrition.TReference);
                    }
                    _dbContext.SaveChanges();

                    // Food Diets
                    List <TFoodDiet> foodDiets = _dbContext.TFoodDiet.Where(x => x.TFood.Id == tFood.Id).ToList();
                    _dbContext.TFoodDiet.RemoveRange(foodDiets.Where(x => !request.Diets.Contains(x.TDietId)));

                    int selectedDietsCount = _dbContext.TDiet.Where(x => request.Diets.Contains(x.Id)).Count();
                    if (selectedDietsCount != request.Diets.Count)
                    {
                        createFoodResult.Status  = false;
                        createFoodResult.Message = "Selected diets are invalid!";
                        return(Task.FromResult(createFoodResult));
                    }
                    foreach (int dietId in request.Diets.Where(x => !foodDiets.Any(z => z.TDietId == x)))
                    {
                        _dbContext.TFoodDiet.Add(new TFoodDiet()
                        {
                            TFoodId = tFood.Id,
                            TDietId = dietId
                        });
                    }

                    // Food Allergies
                    List <TFoodAllergy> foodAllergies = _dbContext.TFoodAllergy.Where(x => x.TFood.Id == tFood.Id).ToList();
                    _dbContext.TFoodAllergy.RemoveRange(foodAllergies.Where(x => !request.Allergies.Contains(x.TAllergyId)));

                    int selectedAllergiesCount = _dbContext.TAllergy.Where(x => request.Allergies.Contains(x.Id)).Count();
                    if (selectedAllergiesCount != request.Allergies.Count)
                    {
                        createFoodResult.Status  = false;
                        createFoodResult.Message = "Selected Allergies are invalid!";
                        return(Task.FromResult(createFoodResult));
                    }
                    foreach (int AllergyId in request.Allergies.Where(x => !foodAllergies.Any(z => z.TAllergyId == x)))
                    {
                        _dbContext.TFoodAllergy.Add(new TFoodAllergy()
                        {
                            TFoodId    = tFood.Id,
                            TAllergyId = AllergyId
                        });
                    }

                    // Food Deficiencies
                    List <TFoodDeficiency> foodDeficiencies = _dbContext.TFoodDeficiency.Where(x => x.TFood.Id == tFood.Id).ToList();
                    _dbContext.TFoodDeficiency.RemoveRange(foodDeficiencies.Where(x => !request.Deficiencies.Contains(x.TDeficiencyId)));

                    int selectedDeficienciesCount = _dbContext.TDeficiency.Where(x => request.Deficiencies.Contains(x.Id)).Count();
                    if (selectedDeficienciesCount != request.Deficiencies.Count)
                    {
                        createFoodResult.Status  = false;
                        createFoodResult.Message = "Selected Deficiencies are invalid!";
                        return(Task.FromResult(createFoodResult));
                    }
                    foreach (int DeficiencyId in request.Deficiencies.Where(x => !foodDeficiencies.Any(z => z.TDeficiencyId == x)))
                    {
                        _dbContext.TFoodDeficiency.Add(new TFoodDeficiency()
                        {
                            TFoodId       = tFood.Id,
                            TDeficiencyId = DeficiencyId
                        });
                    }

                    // Food NutritionCondition
                    List <TFoodNutritionCondition> userNutritionConditions = _dbContext.TFoodNutritionCondition.Where(x => x.TFood.Id == tFood.Id).ToList();
                    _dbContext.TFoodNutritionCondition.RemoveRange(userNutritionConditions.Where(x => !request.NutritionConditions.Contains(x.TNutritionConditionId)));

                    int selectedNutritionConditionsCount = _dbContext.TNutritionCondition.Where(x => request.NutritionConditions.Contains(x.Id)).Count();
                    if (selectedNutritionConditionsCount != request.NutritionConditions.Count)
                    {
                        createFoodResult.Status  = false;
                        createFoodResult.Message = "Selected nutrition Conditions are invalid!";
                        return(Task.FromResult(createFoodResult));
                    }
                    foreach (int NutritionConditionId in request.NutritionConditions.Where(x => !userNutritionConditions.Any(z => z.TNutritionConditionId == x)))
                    {
                        _dbContext.TFoodNutritionCondition.Add(new TFoodNutritionCondition()
                        {
                            TFoodId = tFood.Id,
                            TNutritionConditionId = NutritionConditionId
                        });
                    }
                    _dbContext.SaveChanges();

                    SqlParameter foodId = new SqlParameter("@FoodID", tFood.Id);
                    _dbContext.Database.ExecuteSqlRaw("EXEC spCalculateFoodRefrence @FoodID", foodId);
                    transaction.Complete();
                    createFoodResult.Status = true;
                    createFoodResult.Result = new CreateSupplierFoodOutput()
                    {
                        Id = tFood.Id
                    };
                }
            }
            catch (SqlException ex)
            {
                createFoodResult.Status  = false;
                createFoodResult.Message = ex.ToJsonString();
            }
            catch (Exception ex)
            {
                createFoodResult.Status  = false;
                createFoodResult.Message = ex.ToJsonString();
            }
            return(Task.FromResult(createFoodResult));
        }