public async Task <IActionResult> CreateAndConfirmationQuestion([FromBody] CreateQuestCmd createQuestCmd) { QuestWrite ctx = new QuestWrite( new EFList <Post>(_dbContext.Post), new EFList <User>(_dbContext.User)); var dependencies = new QuestDependencies(); dependencies.GenerateConfirmationToken = () => Guid.NewGuid().ToString(); dependencies.SendConfirmationEmail = SendEmail; var expr = from createQuestResult in QuestDomain.CreateQuestion(createQuestCmd) let user = createQuestResult.SafeCast <CreateQuestResult.QuestCreated>().Select(p => p.Author) let confirmQuestCmd = new ConfirmQuestCmd(user) from ConfirmQuestResult in QuestDomain.ConfirmQuestion(confirmQuestCmd) select new { createQuestResult, ConfirmQuestResult }; var r = await _interpreter.Interpret(expr, ctx, dependencies); // _dbContext.Post.Add(new Post { PostTypeId=1,Title=createQuestCmd.Title, PostText=createQuestCmd.Body}); await _dbContext.SaveChangesAsync(); return(r.createQuestResult.Match( created => (IActionResult)Ok(created.Question.PostId), notCreated => StatusCode(StatusCodes.Status500InternalServerError, "Question could not be created."),//todo return 500 (), invalidRequest => BadRequest("Invalid request."))); }
public static Port <ICreateQuestResult> CreateQuestion(CreateQuestCmd command) => NewPort <CreateQuestCmd, ICreateQuestResult>(command);