Esempio n. 1
0
 public GraphQlController(ResourcesDbContext db,
                          UserManager <AppUser> userManager,
                          SignInManager <AppUser> signInManager)
 {
     _db            = db;
     _userManager   = userManager;
     _signInManager = signInManager;
 }
Esempio n. 2
0
        public DieterMutation(ResourcesDbContext db,
                              UserManager <AppUser> userManager,
                              SignInManager <AppUser> signInManager)
        {
            Field <UserType>(
                "registerUser",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <RegisterUserInputType> > {
                Name = "user"
            },
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "password"
            }),
                resolve: context =>
            {
                var user     = context.GetArgument <User>("user");
                var password = context.GetArgument <string>("password");

                var result = userManager.CreateAsync(
                    new AppUser()
                {
                    UserName = user.UserName,
                    Email    = user.Email
                }, password).Result;

                if (!result.Succeeded)
                {
                    return(null);
                }
                user.RegistrationDate = DateTime.Now;
                user.LastActive       = DateTime.Now;
                db.Users.Add(user);
                db.SaveChanges();
                return(user);
            });


            Field <RecipeType>(
                "addRecipe",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <AddRecipeInputType> >
            {
                Name = "recipe"
            },
                    new QueryArgument <NonNullGraphType <ListGraphType <IdGraphType> > >
            {
                Name = "ingredientIds"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> >
            {
                Name = "authorUserId"
            }),
                resolve: context =>
            {
                var recipe       = context.GetArgument <Recipe>("recipe");
                var ingredients  = context.GetArgument <List <int> >("ingredientIds");
                var authorUserId = context.GetArgument <int>("authorUserId");

                //add rating record
                var rating = new Rating();
                db.Ratings.Add(rating);
                db.SaveChanges();
                recipe.Rating = rating;

                //add user
                var user      = db.Users.FirstOrDefault(x => x.UserId == authorUserId);
                recipe.Author = user;

                //add recipe
                db.Recipes.Add(recipe);
                db.SaveChanges();

                //add ingredients
                foreach (var ingredientId in ingredients)
                {
                    var ingredientRecipe          = new IngredientRecipe();
                    ingredientRecipe.RecipeId     = recipe.RecipeId;
                    ingredientRecipe.IngredientId = ingredientId;
                    db.IngredientRecipes.Add(ingredientRecipe);
                }

                db.SaveChanges();


                return(recipe);
            });

            Field <IngredientType>(
                "addIngredient",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <AddIngredientInputType> >
            {
                Name = "ingredient"
            }),
                resolve: context =>
            {
                var ingredient = context.GetArgument <Ingredient>("ingredient");

                db.Ingredients.Add(ingredient);
                db.SaveChanges();

                return(ingredient);
            });

            Field <CommentType>(
                "addComment",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <AddCommentInputType> > {
                Name = "comment"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "authorUserId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "recipeId"
            }),
                resolve: context =>
            {
                var comment      = context.GetArgument <Comment>("comment");
                var authorUserId = context.GetArgument <int>("authorUserId");
                var recipeId     = context.GetArgument <int>("recipeId");

                //add rating record
                var rating = new Rating();
                db.Ratings.Add(rating);
                db.SaveChanges();
                comment.Rating = rating;

                //add author
                comment.Author = db.Users.FirstOrDefault(x => x.UserId == authorUserId);
                //add recipe
                comment.Recipe = db.Recipes.FirstOrDefault(x => x.RecipeId == recipeId);

                //add comment
                comment.PublicationDate = DateTime.Now;
                db.Comments.Add(comment);
                db.SaveChanges();

                return(comment);
            });
            Field <UserType>(
                "loginUser",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "userName"
            },
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "password"
            }),
                resolve: context =>
            {
                var userName = context.GetArgument <string>("userName");
                var password = context.GetArgument <string>("password");

                var identityUser = userManager.FindByNameAsync(userName).Result;
                if (identityUser == null)
                {
                    return(null);
                }

                var result = signInManager
                             .CheckPasswordSignInAsync(identityUser, password, false).Result;

                if (!result.Succeeded)
                {
                    return(null);
                }
                var user = db.Users.FirstOrDefault(x => x.UserName == userName);
                if (user == null)
                {
                    return(null);
                }
                user.LastActive = DateTime.Now;
                db.SaveChanges();
                return(user);
            });

            /*Field<PhotoType>(
             *  "addPhoto",
             *  arguments: new QueryArguments(
             *      new QueryArgument<NonNullGraphType<AddPhotoInputType>> {Name = "photo"},
             *      new QueryArgument<IdGraphType> {Name = "recipeId"},
             *      new QueryArgument<IdGraphType> {Name = "ingredientId"}),
             *  resolve: context =>
             *  {
             *      var photo = context.GetArgument<Photo>("photo");
             *      var recipeId = context.GetArgument<int?>("recipeId");
             *      var ingredientId = context.GetArgument<int?>("ingredientId");
             *      if ((ingredientId == null && recipeId == null) || (ingredientId != null && recipeId != null))
             *      {
             *          return null;
             *      }
             *      else
             *      {
             *          db.Photos.Add(photo);
             *          db.SaveChanges();
             *          if (recipeId != null)
             *          {
             *              var recipe = db.Recipes.FirstOrDefault(x => x.RecipeId == recipeId);
             *              if (recipe != null) recipe.Photo = photo;
             *          }
             *          else
             *          {
             *              var ingredient = db.Ingredients.FirstOrDefault(x => x.IngredientId == ingredientId);
             *              if (ingredient != null) ingredient.Photo = photo;
             *          }
             *
             *          db.SaveChanges();
             *
             *          return photo;
             *      }
             *  });*/
            Field <IngredientRecipeType>(
                "assignIngredient",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "ingredientId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "recipeId"
            }),
                resolve: context =>
            {
                var recipeId     = context.GetArgument <int>("recipeId");
                var ingredientId = context.GetArgument <int>("ingredientId");

                var ingredientRecipe          = new IngredientRecipe();
                ingredientRecipe.RecipeId     = recipeId;
                ingredientRecipe.IngredientId = ingredientId;
                db.IngredientRecipes.Add(ingredientRecipe);
                db.SaveChanges();

                return(ingredientRecipe);
            }
                );
            Field <UserType>(
                name: "vote",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "userId"
            },
                    new QueryArgument <IdGraphType> {
                Name = "recipeId"
            },
                    new QueryArgument <IdGraphType> {
                Name = "commentId"
            },
                    new QueryArgument <NonNullGraphType <VoteTypeEnum> > {
                Name = "voteType"
            }),
                resolve: context =>
            {
                var userId    = context.GetArgument <int>("userId");
                var recipeId  = context.GetArgument <int?>("recipeId");
                var commentId = context.GetArgument <int?>("commentId");
                var voteType  = context.GetArgument <VoteType>("voteType");
                var user      = db.Users
                                .FirstOrDefault(x => x.UserId == userId);

                if (recipeId == null && commentId == null)
                {
                    return(null);
                }

                Rating rating = null;
                if (recipeId != null)
                {
                    rating = db.Recipes
                             .Where(x => x.RecipeId == recipeId)
                             .Select(x => x.Rating)
                             .FirstOrDefault();
                }
                else
                {
                    rating = db.Comments
                             .Where(x => x.CommentId == commentId)
                             .Select(x => x.Rating)
                             .FirstOrDefault();
                }


                var checkUserVoted = db.UserVotes
                                     .Where(x => x.Rating == rating)
                                     .FirstOrDefault(x => x.User == user);

                if (checkUserVoted != null)
                {
                    return(null);
                }

                switch (voteType)
                {
                case VoteType.Up:
                    if (rating != null)
                    {
                        rating.UpVotes += 1;
                    }
                    db.SaveChanges();
                    break;

                case VoteType.Down:
                    if (rating != null)
                    {
                        rating.DownVotes += 1;
                    }
                    db.SaveChanges();
                    break;

                default:
                    return(null);
                }

                var userVote = new UserVote {
                    Rating = rating, User = user, VoteType = voteType
                };
                db.UserVotes.Add(userVote);
                db.SaveChanges();


                return(user);
            });
        }
Esempio n. 3
0
 private static void SeedData(ResourcesDbContext context)
 {
 }
Esempio n. 4
0
 public ResourceService(ResourcesDbContext context)
 {
     this.context = context;
 }
Esempio n. 5
0
        public DieterQuery(ResourcesDbContext db)
        {
            Field <UserType>(
                "getUser",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "userId",
            }),
                resolve: context =>
            {
                var id = context.GetArgument <int?>("userId");
                return(db
                       .Users
                       .FirstOrDefault(i => i.UserId == id));
            }
                );
            Field <ListGraphType <UserType> >(
                "getUsers",
                resolve: context => db.Users);


            Field <RecipeType>(
                "getRecipe",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "recipeId",
            }),
                resolve: context =>
            {
                var id = context.GetArgument <int?>("recipeId");
                return(db
                       .Recipes
                       .FirstOrDefault(i => i.RecipeId == id));
            }
                );
            Field <ListGraphType <RecipeType> >(
                "getRecipes",
                arguments: new QueryArguments(
                    new QueryArgument <IntGraphType> {
                Name = "calories",
            },
                    new QueryArgument <IntGraphType> {
                Name = "amount"
            },
                    new QueryArgument <IntGraphType> {
                Name = "offset", DefaultValue = 0
            }),
                resolve: context =>
            {
                var calories = context.GetArgument <int?>("calories");
                var amount   = context.GetArgument <int?>("amount");
                var offset   = context.GetArgument <int?>("offset");

                if (calories == null && amount == null)
                {
                    return(db
                           .Recipes);
                }

                if (calories == null)
                {
                    return(db
                           .Recipes
                           .Take((int)amount));
                }

                if (amount == null)
                {
                    return(db
                           .Recipes
                           .Where(x => x.Calories <= calories));
                }

                var allRecipes = db.Recipes
                                 .Where(x => x.Calories <= calories / amount).ToList();

                var returnRecipes = new List <Recipe>();
                var rnd           = new Random();
                while (amount > 0 && allRecipes.Count > 0 && calories > 0)
                {
                    var index  = rnd.Next(allRecipes.Count - 1);
                    var recipe = allRecipes[index];
                    if (calories - recipe.Calories - offset > 0)
                    {
                        returnRecipes.Add(recipe);
                        amount--;
                        calories -= recipe.Calories;
                        allRecipes.RemoveAt(index);
                    }
                    else
                    {
                        allRecipes.RemoveAt(index);
                    }
                }

                return(returnRecipes);
            }
                );

            Field <CommentType>(
                "getComment",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "commentId"
            }),
                resolve: context =>
            {
                var commentId = context.GetArgument <int?>("commentId");
                return(db.Comments
                       .FirstOrDefault(x => x.CommentId == commentId));
            });
            Field <ListGraphType <CommentType> >(
                "getComments",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "recipeId"
            }),
                resolve: context =>
            {
                var recipeId = context.GetArgument <int?>("recipeId");
                return(db.Comments
                       .Where(x => x.Recipe.RecipeId == recipeId));
            });

            Field <IngredientType>(
                "getIngredient",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "ingredientId"
            }),
                resolve: context =>
            {
                var ingredientId = context.GetArgument <int?>("ingredientId");
                return(db.Ingredients
                       .FirstOrDefault(x => x.IngredientId == ingredientId));
            });
            Field <ListGraphType <IngredientType> >(
                "getIngredients",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "recipeId"
            },
                    new QueryArgument <IngredientTypeEnum> {
                Name = "ingredientType"
            }),
                resolve: context =>
            {
                var recipeId       = context.GetArgument <int?>("recipeId");
                var ingredientType = context.GetArgument <Enums.IngredientType?>("ingredientType");

                if (recipeId == null && ingredientType == null)
                {
                    return(db.Ingredients);
                }
                else if (recipeId == null)
                {
                    return(db.Ingredients
                           .Where(x => x.IngredientType.Value == ingredientType));
                }

                return(db.Recipes
                       .Where(x => x.RecipeId == recipeId)
                       .Select(x => x.IngredientRecipes.Select(y => y.Ingredient))
                       .SingleOrDefault());
            });
            Field <ListGraphType <RecipeType> >(
                "getUserRecipes",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "userId"
            }),
                resolve: context =>
            {
                var userId = context.GetArgument <int>("userId");
                return(db.Recipes.Where(x => x.Author.UserId == userId));
            });
        }
Esempio n. 6
0
 public EventService(ResourcesDbContext context, IMessageSession messageSession)
 {
     this.context        = context;
     this.messageSession = messageSession;
 }