Exemplo n.º 1
0
        public IHttpActionResult PutTFood(int id, TFood tFood)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != tFood.Id)
            {
                return(BadRequest());
            }

            db.Entry(tFood).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TFoodExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Exemplo n.º 2
0
        public IHttpActionResult GetTFood(int id)
        {
            TFood tFood = db.TFoods.Find(id);

            if (tFood == null)
            {
                return(NotFound());
            }

            return(Ok(tFood));
        }
Exemplo n.º 3
0
        public IHttpActionResult PostTFood(TFood tFood)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.TFoods.Add(tFood);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = tFood.Id }, tFood));
        }
Exemplo n.º 4
0
        public IHttpActionResult DeleteTFood(int id)
        {
            TFood tFood = db.TFoods.Find(id);

            if (tFood == null)
            {
                return(NotFound());
            }

            db.TFoods.Remove(tFood);
            db.SaveChanges();

            return(Ok(tFood));
        }
Exemplo n.º 5
0
        public Task <ResultWrapper <CustomerCreatePaymentSessionOutput> > Handle(CustomerCreatePaymentSessionCommand request, CancellationToken cancellationToken)
        {
            ResultWrapper <CustomerCreatePaymentSessionOutput> result = new ResultWrapper <CustomerCreatePaymentSessionOutput>();

            try
            {
                using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    TUser tUser = _dbContext.TUser.FirstOrDefault(x => x.FireBaseId == request.firebaseId);
                    if (tUser == null)
                    {
                        result.Status  = false;
                        result.Message = "cannot find customer!";
                        return(Task.FromResult(result));
                    }

                    if (!request.OrderItems.Any())
                    {
                        result.Status  = false;
                        result.Message = "invalid foods data!";
                        return(Task.FromResult(result));
                    }

                    TUser tSupplier = _dbContext.TFood
                                      .Include(x => x.TUser)
                                      .FirstOrDefault(x => x.Id == request.OrderItems.First().FoodId)?.TUser;
                    if (tSupplier == null)
                    {
                        result.Status  = false;
                        result.Message = "cannot find supplier!";
                        return(Task.FromResult(result));
                    }

                    string generatedCode   = "";
                    string generatedTitle  = "";
                    Guid   PaymentUniqueId = Guid.NewGuid();

                    TOrder tOrder = new TOrder()
                    {
                        Enabled           = true,
                        Code              = generatedCode,
                        Created           = DateTime.Now,
                        Date              = DateTime.Now,
                        Title             = generatedTitle,
                        TrackingCode      = PaymentUniqueId.ToString(),
                        TSupplierId       = tSupplier.Id,
                        TUserId           = tUser.Id,
                        TotalPayablePrice = 0,
                        Submited          = false
                    };
                    _dbContext.TOrder.Add(tOrder);
                    _dbContext.SaveChanges();

                    decimal TotalPayablePrice = 0;
                    foreach (var detail in request.OrderItems)
                    {
                        TFood food = _dbContext.TFood
                                     .FirstOrDefault(x => x.Id == detail.FoodId);

                        if (food == null)
                        {
                            result.Status  = false;
                            result.Message = "invalid food data!";
                            return(Task.FromResult(result));
                        }
                        TOrderDetail tOrderDetail = new TOrderDetail()
                        {
                            Enabled   = true,
                            Created   = DateTime.Now,
                            Amount    = detail.Amount,
                            TFoodId   = food.Id,
                            TUserId   = tSupplier.Id,
                            UnitPrice = food.Price,
                            RowPrice  = food.Price * detail.Amount,
                            TOrderId  = tOrder.Id
                        };
                        TotalPayablePrice += tOrderDetail.RowPrice;
                        _dbContext.TOrderDetail.Add(tOrderDetail);
                    }
                    _dbContext.SaveChanges();

                    tOrder.TotalPayablePrice = TotalPayablePrice;
                    _dbContext.TOrder.Update(tOrder);
                    _dbContext.SaveChanges();

                    string   SuccessUrl = request.SuccessUrl + "?UID=" + PaymentUniqueId;
                    TPayment tPayment   = new TPayment()
                    {
                        UniqueId = PaymentUniqueId,
                        UserId   = tUser.Id,
                        Amount   = TotalPayablePrice,
                        OrderId  = tOrder.Id,
                        Success  = false,
                        Used     = false,
                        Enabled  = true,
                        Created  = DateTime.Now,
                    };
                    _dbContext.TPayment.Add(tPayment);
                    _dbContext.SaveChanges();

                    transaction.Complete();

                    string secretKey = "sk_test_51JKejjB9j2pHQUNgVymkcotBwOhw64UhTOxrOWLn6QzpdIqmUOGh0lJCkozGMgWNLYQcg4XKriYmiNjfDRiwujnV00Lv2iKYgC";
                    StripeConfiguration.ApiKey = secretKey;
                    var options = new SessionCreateOptions()
                    {
                        PaymentMethodTypes = new List <String>()
                        {
                            "card"
                        },
                        LineItems = new List <SessionLineItemOptions>()
                        {
                        },
                        PaymentIntentData = new SessionPaymentIntentDataOptions()
                        {
                            ApplicationFeeAmount = 500,
                            TransferData         = new SessionPaymentIntentDataTransferDataOptions()
                            {
                                Destination = "acct_1JL9JuPUzKlkrnDH"
                            }
                        },
                        Mode       = "payment",
                        SuccessUrl = SuccessUrl,
                        CancelUrl  = request.CancelUrl
                    };
                    foreach (var item in request.OrderItems)
                    {
                        options.LineItems.Add(new SessionLineItemOptions()
                        {
                            Quantity  = item.Amount,
                            PriceData = new SessionLineItemPriceDataOptions()
                            {
                                Currency    = "usd",
                                UnitAmount  = item.Price,
                                ProductData = new SessionLineItemPriceDataProductDataOptions()
                                {
                                    Name = item.FoodId.ToString()
                                }
                            }
                        });
                    }
                    var            service = new SessionService();
                    Task <Session> session = service.CreateAsync(options);
                    session.Wait();
                    result = new ResultWrapper <CustomerCreatePaymentSessionOutput>()
                    {
                        Status = true,
                        Result = new CustomerCreatePaymentSessionOutput()
                        {
                            SessionId  = session.Result.Id,
                            SessionUrl = session.Result.Url
                        }
                    };
                }
            }
            catch (Exception ex)
            {
                result.Status  = false;
                result.Message = ex.Message;
            }
            return(Task.FromResult(result));
        }
Exemplo n.º 6
0
        public Task <ResultWrapper <UpdateSupplierFoodOutput> > Handle(UpdateSupplierFoodCommand request, CancellationToken cancellationToken)
        {
            ResultWrapper <UpdateSupplierFoodOutput> updateFoodResult = new ResultWrapper <UpdateSupplierFoodOutput>();

            if (!request.FoodNutritions.Any())
            {
                updateFoodResult.Status  = false;
                updateFoodResult.Message = "please enter nutiritions!";
                return(Task.FromResult(updateFoodResult));
            }
            try
            {
                using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    TFood tFood = _dbContext.TFood
                                  .Include(x => x.TFoodNutritions)
                                  .FirstOrDefault(x => x.Id == request.Id);

                    if (tFood == null)
                    {
                        updateFoodResult.Status  = false;
                        updateFoodResult.Message = "this food doesn't exists!";
                        return(Task.FromResult(updateFoodResult));
                    }
                    tFood.Title       = request.Title;
                    tFood.Image       = request.Image;
                    tFood.Tags        = request.Tags;
                    tFood.Price       = request.Price;
                    tFood.Enabled     = request.Enabled;
                    tFood.TFoodTypeId = request.FoodTypeId;
                    _dbContext.TFood.Update(tFood);
                    _dbContext.SaveChanges();

                    List <TReference> tRefrences = _dbContext.TReference.Where(x => tFood.TFoodNutritions.Select(x => x.TReferenceId).Contains(x.Id)).ToList();
                    _dbContext.TFoodNutrition.RemoveRange(tFood.TFoodNutritions);
                    _dbContext.TReference.RemoveRange(tRefrences);
                    _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)
                    {
                        updateFoodResult.Status  = false;
                        updateFoodResult.Message = "Selected diets are invalid!";
                        return(Task.FromResult(updateFoodResult));
                    }
                    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)
                    {
                        updateFoodResult.Status  = false;
                        updateFoodResult.Message = "Selected Allergies are invalid!";
                        return(Task.FromResult(updateFoodResult));
                    }
                    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)
                    {
                        updateFoodResult.Status  = false;
                        updateFoodResult.Message = "Selected Deficiencies are invalid!";
                        return(Task.FromResult(updateFoodResult));
                    }
                    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)
                    {
                        updateFoodResult.Status  = false;
                        updateFoodResult.Message = "Selected nutrition Conditions are invalid!";
                        return(Task.FromResult(updateFoodResult));
                    }
                    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();
                    updateFoodResult.Status = true;
                    updateFoodResult.Result = new UpdateSupplierFoodOutput()
                    {
                        Id = tFood.Id
                    };
                }
            }
            catch (SqlException ex)
            {
                updateFoodResult.Status  = false;
                updateFoodResult.Message = ex.ToJsonString();
            }
            catch (Exception ex)
            {
                updateFoodResult.Status  = false;
                updateFoodResult.Message = ex.ToJsonString();
            }
            return(Task.FromResult(updateFoodResult));
        }