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>()); 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) { var ctx = await _dbContext.LoadAsync("dbo.BackofficeHttpController", new { OrganisationId = createTenantCmd.OrganisationId }, async reader => { var tenants = await reader.ReadAsync <Tenant>(); var tenantUsers = await reader.ReadAsync <TenantUser>(); var users = await reader.ReadAsync <User>(); _dbContext.AttachRange(tenants); _dbContext.AttachRange(tenantUsers); _dbContext.AttachRange(users); return(new BackofficeWriteContext( new EFList <Tenant>(_dbContext.Tenant), new EFList <TenantUser>(_dbContext.TenantUser), new EFList <User>(_dbContext.User))); }); var expr = from createResult in BackofficeDomain.CreateTenant(createTenantCmd.OrganisationId, createTenantCmd.TenantName, createTenantCmd.Description, createTenantCmd.AdminEmail, createTenantCmd.AdminName, createTenantCmd.UserId) let adminUser = createResult.SafeCast <CreateTenantResult.TenantCreated>().Select(p => p.User) from u in BackofficeDomain.InviteTenantAdmin(adminUser) select new { createResult, u }; var r = await _interpreter.Interpret(expr, ctx); await _dbContext.SaveChangesAsync(); return(r.createResult.Match( created => (IActionResult)Ok(new CreateTenantAndAdminResponse(true, created.Tenant.TenantId, created.User.DisplayName)), notCreated => BadRequest(new CreateTenantAndAdminResponse(false, 0, string.Empty)), invalidRequest => BadRequest(new CreateTenantAndAdminResponse(false, 0, string.Empty)))); }
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."))); }
public async Task InviteTenantAdminAdapter_Tests(params object[] path) { var input = new InviteTenantAdminInputGen().Get(path.OfType <InviteTenantAdminCmdInput>().Single()); var ctx = new BackofficeWriteContextGen().Get(path.OfType <BackofficeWriteContextInput>().Single()); var expr = from t in BackofficeDomain.InviteTenantAdmin(input.AdminUser) select t; var result = await TestExpr(ctx, expr, path); }
public async Task CreateTenantAdapter(params object[] path) { var input = new CreateTenantCmdInputGen().Get(path.OfType <CreateTenantCmdInput>().Single()); var ctx = new BackofficeWriteContextGen().Get(path.OfType <BackofficeWriteContextInput>().Single()); var expr = from t in BackofficeDomain.CreateTenant(input.OrganisationId, input.TenantName, input.Description, input.AdminEmail, input.AdminName, input.UserId) select t; var result = await TestExpr(ctx, expr, path); }
public async Task <InviteUserResponse> InviteUser(Guid organisationId, Guid userId, string email, string userName) { var expr = from createResult in BackofficeDomain.InviteUser(organisationId, userId, email, userName) from publishResult in Publish(typeof(object).Name, createResult) select createResult; var r = await _interpreter.Interpret(expr, this._ctx); await _dbContext.SaveChangesAsync(); return(r.Match( created => new InviteUserResponse(true, created.User.UserId, created.User.DisplayName), notCreated => new InviteUserResponse(false, Guid.Empty, string.Empty), invalidRequest => new InviteUserResponse(false, Guid.Empty, string.Empty))); }
public async Task <CreateTenantAndAdminResponse> CreateTenantAndAdmin(Guid organisationId, string tenantName, string description, string adminEmail, string adminName, Guid userId) { //define var expr = from createResult in BackofficeDomain.CreateTenant(organisationId, tenantName, description, adminEmail, adminName, userId) let adminUser = createResult.SafeCast <TenantCreated>().Select(p => p.User) from inviteResult in BackofficeDomain.InviteTenantAdmin(adminUser) from setPermissionsResult in BackofficeDomain.SetPermissions(adminUser.Select(p => p.UserId), 1) from publishResult in Publish(typeof(object).Name, createResult) select createResult; //execute var r = await _interpreter.Interpret(expr, this._ctx); await _dbContext.SaveChangesAsync(); //adapt return(r.Match( created => new CreateTenantAndAdminResponse(true, created.Tenant.TenantId, created.User.DisplayName), notCreated => new CreateTenantAndAdminResponse(false, 0, string.Empty), invalidRequest => new CreateTenantAndAdminResponse(false, 0, string.Empty))); }