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."))); }
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."))); }