Ejemplo n.º 1
0
        public async Task <IActionResult> CreateReplyAsync(int questionId, [FromBody] CreateAnswerCmdInternal createAnswerCmd)
        {
            var ctx = new QuestionsWriteContext(new EFList <Post>(_dbContext.Post), new EFList <User>(_dbContext.User));

            var dependencies = new QuestionsDependency();

            dependencies.GenerateConfirmationToken = () => Guid.NewGuid().ToString();
            dependencies.SendConfirmationEmail     = SendEmailToOwner;

            var expr = from createResult in QuestionsDomain.CreateAnswer(createAnswerCmd.TenantId, createAnswerCmd.PostId, createAnswerCmd.UserId, questionId, createAnswerCmd.Answer, createAnswerCmd.User, createAnswerCmd.Title)
                       let user = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.User)
                                  let tenantId = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.TenantId)
                                                 let userId = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.UserId)
                                                              let QuestionId = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.QuestionId)
                                                                               let answer = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.Answer)
                                                                                            let isPublished = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.IsPublished)
                                                                                                              let postId                         = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.PostId)
                                                                                                                                       let title = createResult.SafeCast <CreateAnswerResult.ReplyPublished>().Select(p => p.Title)
                                                                                                                                                   let confirmReply = new CreateAnswerCmdInternal((int)tenantId, (int)postId, (Guid)userId, (int)QuestionId, (string)answer, (User)user, (string)title)
                                                                                                                                                                      from CreateAnswerResult in QuestionsDomain.CreateAnswer(((CreateAnswerCmdInternal)confirmReply).TenantId, ((CreateAnswerCmdInternal)confirmReply).PostId, ((CreateAnswerCmdInternal)confirmReply).UserId, ((CreateAnswerCmdInternal)confirmReply).QuestionId, ((CreateAnswerCmdInternal)confirmReply).Answer, ((CreateAnswerCmdInternal)confirmReply).User, ((CreateAnswerCmdInternal)confirmReply).Title)
                                                                                                                                                                      select new { createResult, CreateAnswerResult };

            var r = await _interpreter.Interpret(expr, ctx, dependencies);

            _dbContext.SaveChanges();

            return(r.createResult.Match(
                       created => (IActionResult)Ok(created.Answer),
                       notCreated => StatusCode(StatusCodes.Status500InternalServerError, "Question could not be created."),
                       invalidRequest => BadRequest("Invalid request.")));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> CreateQuestionAsync([FromBody] CreateQuestionCmd createQuestionCmd)
        {
            var ctx = new QuestionsWriteContext(new EFList <Post>(_dbContext.Post), new EFList <User>(_dbContext.User));

            var dependencies = new QuestionsDependency();

            dependencies.GenerateConfirmationToken = () => Guid.NewGuid().ToString();
            dependencies.SendConfirmationEmail     = SendEmailToOwner;

            var expr = from createResult in QuestionsDomain.CreateQuestion(createQuestionCmd)
                       let title                                                     = createResult.SafeCast <CreateQuestionResult.QuestPublished>().Select(p => p.Title)
                                                        let body                     = createResult.SafeCast <CreateQuestionResult.QuestPublished>().Select(p => p.Body)
                                                                             let tag = createResult.SafeCast <CreateQuestionResult.QuestPublished>().Select(p => p.Tag)
                                                                                       let tenantId = createResult.SafeCast <CreateQuestionResult.QuestPublished>().Select(p => p.TenantId)
                                                                                                      let userId                       = createResult.SafeCast <CreateQuestionResult.QuestPublished>().Select(p => p.UserId)
                                                                                                                              let user = createResult.SafeCast <CreateQuestionResult.QuestPublished>().Select(p => p.User)
                                                                                                                                         let confirmQuest = new CreateQuestionCmd((string)title, (string)body, (string)tag, (int)tenantId, (Guid)userId, (TenantUser)user)
                                                                                                                                                            from CreateQuestionResult in QuestionsDomain.CreateQuestion(confirmQuest)
                                                                                                                                                            select new { createResult, CreateQuestionResult };

            var r = await _interpreter.Interpret(expr, ctx, dependencies);

            _dbContext.SaveChanges();

            return(r.createResult.Match(
                       created => (IActionResult)Ok(created.Title),
                       notCreated => StatusCode(StatusCodes.Status500InternalServerError, "Question could not be created."),
                       invalidRequest => BadRequest("Invalid request.")));
        }