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.")));
        }
示例#2
0
        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.")));
        }