예제 #1
0
        public async Task <BaseOutput <object> > UpdateUserAllergies(string uid, List <int> allergyIds)
        {
            var user = await _dbContext.Users
                       .Where(u => u.UserUID == uid).SingleOrDefaultAsync();

            if (user == null)
            {
                return new BaseOutput <object>
                       {
                           IsSuccessful = false,
                           Message      = $"User with uid = {uid} not found",
                           Payload      = ""
                       }
            }
            ;
            //remove all first
            List <UserAllergyEntity> removeUserAllergyEntities = new List <UserAllergyEntity>();
            var existList = await _dbContext.UserAllergies
                            .Where(u => u.UserId == user.Id)
                            .ToListAsync();

            foreach (var notExist in existList)
            {
                if (!allergyIds.Contains(notExist.AllergyId))
                {
                    removeUserAllergyEntities.Add(notExist);
                }
            }
            _dbContext.UserAllergies.RemoveRange(removeUserAllergyEntities);
            await _dbContext.SaveChangesAsync();

            //add new ones
            List <UserAllergyEntity> userAllergyEntities = new List <UserAllergyEntity>();

            foreach (var id in allergyIds)
            {
                var exist = await _dbContext.UserAllergies
                            .Where(u => u.AllergyId == id && u.UserId == user.Id).SingleOrDefaultAsync();

                if (exist == null)
                {
                    userAllergyEntities.Add(new UserAllergyEntity {
                        UserId    = user.Id,
                        AllergyId = id
                    });
                }
            }
            _dbContext.UserAllergies.AddRange(userAllergyEntities);

            await _dbContext.SaveChangesAsync();

            return(new BaseOutput <object>
            {
                IsSuccessful = true,
                Message = "Allegies updated.",
                Payload = allergyIds
            });
        }
    }
예제 #2
0
        public async Task <BaseOutput <string> > CreateAddictived(string addictive)
        {
            try
            {
                //1.serialize the product
                var addictiveObj = JsonConvert.DeserializeObject <OpenFoodFactAddictiveDto>(addictive);

                foreach (var tag in addictiveObj.tags)
                {
                    var oldAddictive = _dbContext.Additives
                                       .Where(a => a.OriginalId == tag.id).SingleOrDefault();

                    if (oldAddictive != null)
                    {
                        oldAddictive.Url        = tag.url;
                        oldAddictive.Name       = tag.name;
                        oldAddictive.OriginalId = tag.id;
                        oldAddictive.Products   = tag.products;
                        oldAddictive.SameAs     = (tag.sameAs != null) ? string.Join(",", tag.sameAs) : null;
                        _dbContext.Additives.Update(oldAddictive);
                    }
                    else
                    {
                        var newAddictive = new AdditiveEntity
                        {
                            Url        = tag.url,
                            Name       = tag.name,
                            OriginalId = tag.id,
                            Products   = tag.products,
                            SameAs     = (tag.sameAs != null) ? string.Join(",", tag.sameAs) : null
                        };

                        _dbContext.Additives.Add(newAddictive);
                    }
                }
                await _dbContext.SaveChangesAsync();

                //4.Return the save data from db
                return(new BaseOutput <string>
                {
                    IsSuccessful = true,
                    Message = "addictives created",
                    Payload = JsonConvert.SerializeObject(addictiveObj)
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #3
0
        public async Task <BaseOutput <object> > CreateUserProfile(UserInput input)
        {
            if (await UserExists(input.Provider, input.UserUID))
            {
                return(await GetUserByUid(input.UserUID));
            }

            var inputStr   = JsonConvert.SerializeObject(input);
            var userEntity = JsonConvert.DeserializeObject <UserEntity>(inputStr);

            _dbContext.Users.Add(userEntity);
            await _dbContext.SaveChangesAsync();

            var userId = userEntity.Id;

            if (input.AllergyIds.Any())
            {
                var listOfUserAllergyEntity = new List <UserAllergyEntity>();

                foreach (var id in input.AllergyIds)
                {
                    var userAllergy = new UserAllergyEntity
                    {
                        UserId    = userId,
                        AllergyId = id
                    };
                    listOfUserAllergyEntity.Add(userAllergy);
                }

                _dbContext.UserAllergies.AddRange(listOfUserAllergyEntity);
                await _dbContext.SaveChangesAsync();
            }

            var userStr = JsonConvert.SerializeObject(userEntity);
            var user    = JsonConvert.DeserializeObject <UserDto>(userStr);

            return(new BaseOutput <object>
            {
                IsSuccessful = true,
                Message = "user created",
                Payload = user
            });
        }
예제 #4
0
        public async Task <BaseOutput <object> > CreateNews(string news)
        {
            var newsObj = JsonConvert.DeserializeObject <NewsOrgDto>(news);

            if (!newsObj.status.Equals("ok"))
            {
                return new BaseOutput <object>
                       {
                           IsSuccessful = false,
                           Message      = "news articles not found.",
                           Payload      = newsObj
                       }
            }
            ;

            foreach (var article in newsObj.articles)
            {
                var newsArticleEntity = new NewsArticleEntity
                {
                    Source      = article.source.name,
                    Author      = article.author,
                    Title       = article.title,
                    Description = article.description,
                    Url         = article.url,
                    UrlToImage  = article.urlToImage,
                    PublishedAt = article.publishedAt,
                    Content     = article.content
                };

                _dbContext.NewsArticles.Add(newsArticleEntity);
            }
            await _dbContext.SaveChangesAsync();

            return(new BaseOutput <object>
            {
                IsSuccessful = true,
                Message = "product created",
                Payload = newsObj
            });
        }
예제 #5
0
        public async Task <BaseOutput <object> > CreateProduct(string product)
        {
            //1.serialize the product
            var productObj = JsonConvert.DeserializeObject <OpenFoodFactProductInfoDto>(product);

            if (productObj.status.Equals(0))
            {
                return new BaseOutput <object>
                       {
                           IsSuccessful = false,
                           Message      = "product not found.",
                           Payload      = product
                       }
            }
            ;
            //2.validate the if main fields are present

            //3.Save data to db
            //new product
            var newProductObj = new ProductEntity
            {
                OriginalId      = productObj.product.id,
                Barcode         = productObj.code,
                ProductName     = productObj.product.product_name,
                Brands          = productObj.product.brands,
                NutritionGrades = productObj.product.nutrition_grades,
                ImageUrl        = productObj.product.image_url,
                Thumbnail       = productObj.product.image_thumb_url,
                KeyWords        = string.Join(",", productObj.product._keywords),
                NutrientLevels  = JsonConvert.SerializeObject(productObj.product.nutrient_levels),
                Quantity        = productObj.product.quantity,
                Creator         = productObj.product.creator,
                Nutriments      = JsonConvert.SerializeObject(productObj.product.nutriments),
                Categories      = productObj.product.categories,
                IngredientText  = productObj.product.ingredients_text,
                Additives       = string.Join(",", productObj.product.additives_tags),
                Allergens       = string.Join(",", productObj.product.allergens_tags),
                RawJson         = product
            };

            _dbContext.Products.Add(newProductObj);
            await _dbContext.SaveChangesAsync();

            var productId = newProductObj.Id;
            //new ingredients
            var listOfIngredientEntity = new List <IngredientEntity>();

            foreach (var ingredient in productObj.product.ingredients)
            {
                var newIngredientObj = new IngredientEntity
                {
                    ProductId         = productId,
                    Vegetarian        = ingredient.vegetarian,
                    Vegan             = ingredient.vegan,
                    Text              = ingredient.text,
                    IngreId           = ingredient.id,
                    Percent           = ingredient.percent,
                    Rank              = ingredient.rank,
                    HasSubIngredients = ingredient.has_sub_ingredients
                };

                listOfIngredientEntity.Add(newIngredientObj);
            }
            _dbContext.Ingredients.AddRange(listOfIngredientEntity);
            await _dbContext.SaveChangesAsync();

            //new allergy

            //4.Return the save data from db
            return(new BaseOutput <object>
            {
                IsSuccessful = true,
                Message = "product created",
                Payload = newProductObj
            });
        }