public async Task <IActionResult> CreateTenantAsyncAndInviteAdmin([FromBody] CreateTenantCmd createTenantCmd) { BackofficeWriteContext ctx = new BackofficeWriteContext(new List <Tenant>(), new List <TenantUser>(), new List <User>()); var dependencies = new BackofficeDependencies(); dependencies.GenerateInvitationToken = () => Guid.NewGuid().ToString(); dependencies.SendInvitationEmail = (InvitationLetter letter) => async() => new InvitationAcknowledgement(Guid.NewGuid().ToString()); var expr = from createTenantResult in BackofficeDomain.CreateTenant(createTenantCmd) let adminUser = createTenantResult.SafeCast <CreateTenantResult.TenantCreated>().Select(p => p.AdminUser) let inviteAdminCmd = new InviteTenantAdminCmd(adminUser) from inviteAdminResult in BackofficeDomain.InviteTenantAdmin(inviteAdminCmd) select new { createTenantResult, inviteAdminResult }; var r = await _interpreter.Interpret(expr, ctx, dependencies); _dbContext.Tenant.Add(new EF.Models.Tenant { RowGuid = Guid.NewGuid(), OrganisationId = createTenantCmd.OrganisationId, Name = createTenantCmd.TenantName, Description = createTenantCmd.Description }); //var reply = await _dbContext.QuestionModel.Where(r => r.Title == "intrebTest").SingleOrDefaultAsync(); //_dbContext.Question.Update(reply); await _dbContext.SaveChangesAsync(); return(r.createTenantResult.Match( created => (IActionResult)Ok(created.Tenant.TenantId), notCreated => BadRequest("Tenant could not be created."), invalidRequest => BadRequest("Invalid request."))); }
public async Task <IActionResult> CreateTenantAsyncAndInviteAdmin([FromBody] CreateTenantCmd createTenantCmd) { BackofficeWriteContext ctx = new BackofficeWriteContext( new EFList <Tenant>(_dbContext.Tenant), new EFList <TenantUser>(_dbContext.TenantUser), new EFList <User>(_dbContext.User)); var dependencies = new BackofficeDependencies(); dependencies.GenerateInvitationToken = () => Guid.NewGuid().ToString(); dependencies.SendInvitationEmail = SendEmail; var expr = from createTenantResult in BackofficeDomain.CreateTenant(createTenantCmd) let adminUser = createTenantResult.SafeCast <CreateTenantResult.TenantCreated>().Select(p => p.AdminUser) let inviteAdminCmd = new InviteTenantAdminCmd(adminUser) from inviteAdminResult in BackofficeDomain.InviteTenantAdmin(inviteAdminCmd) select new { createTenantResult, inviteAdminResult }; var r = await _interpreter.Interpret(expr, ctx, dependencies); _dbContext.SaveChanges(); return(r.createTenantResult.Match( created => (IActionResult)Ok(created.Tenant.TenantId), notCreated => StatusCode(StatusCodes.Status500InternalServerError, "Tenant could not be created."),//todo return 500 (), invalidRequest => BadRequest("Invalid request."))); }
public async Task <IActionResult> CreateTenantAsyncAndInviteAdmin([FromBody] CreateTenantCmd createTenantCmd) { BackofficeWriteContext ctx = new BackofficeWriteContext(new List <Tenant>(), new List <TenantUser>(), new List <User>()); /* BackofficeWriteContext ctx = new BackofficeWriteContext( * new EFList<Tenant>(_dbContext.Tenant), * new EFList<TenantUser>(_dbContext.TenantUser), * new EFList<User>(_dbContext.User));*/ var dependencies = new BackofficeDependencies(); dependencies.GenerateInvitationToken = () => Guid.NewGuid().ToString(); dependencies.SendInvitationEmail = (InvitationLetter letter) => async() => new InvitationAcknowledgement(Guid.NewGuid().ToString()); var expr = from createTenantResult in BackofficeDomain.CreateTenant(createTenantCmd) let adminUser = createTenantResult.SafeCast <CreateTenantResult.TenantCreated>().Select(p => p.AdminUser) let inviteAdminCmd = new InviteTenantAdminCmd(adminUser) from inviteAdminResult in BackofficeDomain.InviteTenantAdmin(inviteAdminCmd) select new { createTenantResult, inviteAdminResult }; var r = await _interpreter.Interpret(expr, ctx, dependencies); return(r.createTenantResult.Match( created => (IActionResult)Ok(created.Tenant.TenantId), notCreated => BadRequest("Tenant could not be created."), invalidRequest => BadRequest("Invalid request."))); }