public DifferencesQuery(
            IUserService userService,
            IQuestionService questionService,
            ILikeRecordService likeRecordService,
            IOptions <JwtConfig> options)
        {
            Name = "DifferencesQuery";

            #region User
            FieldAsync <ListGraphType <UserType> >(
                "topUsers",
                resolve: context => userService.GetTopReputationUsers(1));

            FieldAsync <AuthResponseType>(
                "auth",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "type"
            },
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "code"
            }),
                resolve: context =>
            {
                try
                {
                    var type = context.GetArgument <string>("type");
                    var code = context.GetArgument <string>("code");
                    var user = userService.GetUser(type, code);
                    return(new UserWithTokenModel
                    {
                        User = user,
                        AccessToken = JwtGenerator.Generate(options.Value, user)
                    });
                }
                catch (DefinedException ex)
                {
                    context.Errors.Add(ex);
                    return(null);
                }
            });
            #endregion

            #region Question
            FieldAsync <ListGraphType <QuestionType> >(
                "questions",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <CriteriaInputType> > {
                Name = "criteria"
            }
                    ),
                resolve: context =>
            {
                var criteria = context.GetArgument <CriteriaModel>("criteria");
                return(questionService.GetQuestionsByCriteria(criteria));
            });

            FieldAsync <IntGraphType>(
                "questionCount",
                arguments: new QueryArguments(new QueryArgument <NonNullGraphType <CriteriaInputType> > {
                Name = "criteria"
            }),
                resolve: context =>
            {
                var criteria = context.GetArgument <CriteriaModel>("criteria");
                return(questionService.GetQuestionCountByCriteria(criteria));
            });

            FieldAsync <QuestionType>(
                "question",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            }
                    ),
                resolve: context =>
            {
                var questionId = context.GetArgument <int>("id");
                return(questionService.GetQuestion(questionId));
            });

            FieldAsync <ListGraphType <AnswerType> >(
                "questionAnswers",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "questionId"
            }
                    ),
                resolve: context =>
            {
                var questionId = context.GetArgument <int>("questionId");
                return(questionService.GetAnswersByQuestionId(questionId));
            });

            FieldAsync <ListGraphType <AnswerLikeType> >(
                "answerLikedByQuestion",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "questionId"
            }
                    ),
                resolve: context =>
            {
                var questionId = context.GetArgument <int>("questionId");
                return(likeRecordService.GetRecordsByQuestion(questionId));
            });

            FieldAsync <AnswerLikeType>(
                "answerLikedByAnswer",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "answerId"
            }
                    ),
                resolve: context =>
            {
                var answerId = context.GetArgument <int>("answerId");
                return(likeRecordService.GetRecordByAnswer(answerId));
            });
            #endregion

            FieldAsync <ListGraphType <CategoryGroupType> >(
                "categoryDefinition",
                resolve: context => CategoryDefinition.CategoryGroups);
        }
Пример #2
0
        public DifferencesMutation(
            IUserService userService,
            IQuestionService questionService,
            ILikeRecordService likeRecordService)
        {
            Name = "DifferencesMutation";

            #region User
            FieldAsync <UserType>(
                "updateUserInfo",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <UserInputType> > {
                Name = "user"
            }),
                resolve: context =>
            {
                var newUser = context.GetArgument <UserModel>("user");
                return(userService.UpdateUser(newUser));
            });
            #endregion

            #region Question
            FieldAsync <QuestionType>(
                "submitQuestion",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <SubjectInputType> > {
                Name = "question"
            }
                    ),
                resolve: context =>
            {
                try
                {
                    var question = context.GetArgument <SubjectModel>("question");
                    return(question.Id == 0
                            ? questionService.AskQuestion(question)
                            : questionService.UpdateQuestion(question));
                }
                catch (DefinedException ex)
                {
                    context.Errors.Add(ex);
                    return(null);
                }
            }
                );

            FieldAsync <AnswerType>(
                "submitAnswer",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <ReplyInputType> > {
                Name = "answer"
            }
                    ),
                resolve: context =>
            {
                try
                {
                    var answer = context.GetArgument <ReplyModel>("answer");
                    return(answer.Id == 0
                            ? questionService.AddAnswer(answer)
                            : questionService.UpdateAnswer(answer));
                }
                catch (DefinedException ex)
                {
                    context.Errors.Add(ex);
                    return(null);
                }
            }
                );

            FieldAsync <UserType>(
                "likeAnswer",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <LikeInputType> > {
                Name = "likeRecord"
            }
                    ),
                resolve:
                context =>
            {
                try
                {
                    var likeRecord = context.GetArgument <LikeRecordModel>("likeRecord");
                    return(likeRecordService.AddRecord(likeRecord));
                }
                catch (DefinedException ex)
                {
                    context.Errors.Add(ex);
                    return(null);
                }
            });

            #endregion
        }