public async Task <StandardResponse> UpdateAnswerMetadata(ClaimsPrincipal identity, AnswerMetadataUpdateViewModel model,
                                                                  ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var metadata = await _answerService.UpdateAnswerMetadata(db, user, new UpdateAnswerMeta()
                    {
                        AnswerId   = model.AnswerId,
                        RowVersion = model.RowVersion,
                        Votes      = model.Votes,
                    });

                    await db.SaveChangesAsync();

                    return(StandardResponse.For(AnswerMetaViewModel.From(metadata)));
                }
            }
        }
        public async Task <StandardResponse> AskQuestion(ClaimsPrincipal identity, QuestionAddViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var question = await _questionService.CreateQuestion(db, user, new CreateNewQuestion()
                    {
                        Title = model.Title,
                        Body  = model.Body, Tags = model.Tags,
                        Topic = model.Topic ?? Topic.DefaultTopic
                    });

                    await db.SaveChangesAsync();

                    return(StandardResponse.For(new
                    {
                        question.QuestionId
                    }));
                }
            }
        }
        public async Task <StandardResponse> UpdateQuestion(ClaimsPrincipal identity, QuestionUpdateViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity))
                {
                    await _questionService.UpdateQuestion(db, user, new UpdateQuestion()
                    {
                        QuestionId = model.QuestionId,
                        RowVersion = model.RowVersion,
                        Body       = model.Body,
                        Tags       = model.Tags ?? new string[] { },
                        Title      = model.Title,
                        Topic      = model.Topic
                    });

                    await db.SaveChangesAsync();

                    var question = await _questionService.GetQuestion(db, user, model.QuestionId);

                    return(StandardResponse.For(QuestionViewModel.From(question)));
                }
            }
        }
예제 #4
0
        public async Task <StandardResponse> UpdateTopic(ClaimsPrincipal identity, TopicUpdateViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity))
                {
                    var result = await _topicService.UpdateTopic(db, user, new UpdateTopic()
                    {
                        TopicId     = model.TopicId,
                        Description = model.Description,
                        Icon        = PangulStringEncoding.GetBytesFromDataUrl(model.Icon),
                        IconType    = PangulStringEncoding.GetTypeFromDataUrl(model.Icon),
                        RowVersion  = model.RowVersion
                    });

                    await db.SaveChangesAsync();

                    return(StandardResponse.For(new { result.TopicId }));
                }
            }
        }
예제 #5
0
 public StandardResponse GetClaims(ClaimsPrincipal identity)
 {
     return(StandardResponse.For(new
     {
         Token = identity.Identity.Name,
         Authenticated = identity.Identity.IsAuthenticated,
         Claims = identity.Claims.Select(i => $"{i.Type}:{i.Value}").ToArray()
     }));
 }
        public async Task <StandardResponse> GetAnswer(ClaimsPrincipal identity, GetAnswerViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var answer = await _answerService.GetAnswer(db, user, model.Id);

                    return(StandardResponse.For(AnswerViewModel.From(answer)));
                }
            }
        }
        public async Task <StandardResponse> FindAnswers(ClaimsPrincipal identity, SearchAnswersViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var matches = await _searchService.FindAnswersForQuestion(db, user, model.QuestionId, model.Offset, model.Limit);

                    return(StandardResponse.For(matches));
                }
            }
        }
        public async Task <StandardResponse> FindQuestions(ClaimsPrincipal identity, PerformSearchViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var result = await _searchService.SearchForQuestions(db, user, model.Query, model.Offset, model.Limit);

                    return(StandardResponse.For(result));
                }
            }
        }
        public async Task <StandardResponse> GetQuestionMetadata(ClaimsPrincipal identity, GetQuestionViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var meta = await _questionService.GetQuestionMetadata(db, user, model.Id);

                    return(StandardResponse.For(QuestionMetaViewModel.From(meta)));
                }
            }
        }
예제 #10
0
        public async Task <StandardResponse> GetTopic(ClaimsPrincipal identity, TopicGetViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity))
                {
                    var result = !string.IsNullOrWhiteSpace(model.TopicName)
            ? await _topicService.RequireTopic(db, user, model.TopicName)
            : await _topicService.GetTopic(db, user, model.TopicId);

                    return(StandardResponse.For(new TopicViewModel(result)));
                }
            }
        }
예제 #11
0
        public async Task <StandardResponse> AddAnswerToQuestion(ClaimsPrincipal identity, AddAnswerViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var answer = await _answerService.CreateAnswer(db, user, model.QuestionId, model.Body);

                    await db.SaveChangesAsync();

                    return(StandardResponse.For(new
                    {
                        answer.AnswerId
                    }));
                }
            }
        }
        public async Task <StandardResponse> GetQuestionSummary(ClaimsPrincipal identity, GetQuestionViewModel model, ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return(modelState.StandardError());
            }

            using (var db = new ServiceDb())
            {
                using (var user = await _userService.Become(db, identity, null))
                {
                    var question = await _questionService.GetQuestion(db, user, model.Id);

                    var results = await _searchService.FindAnswersForQuestion(db, user, model.Id, 0, 1);

                    var bestAnswer = results.HasResults
            ? Option.Some(await _answerService.GetAnswer(db, user, results.IdentityList[0].ToString()))
            : Option.None <Answer>();

                    return(StandardResponse.For(QuestionSummaryViewModel.From(question, bestAnswer)));
                }
            }
        }