Beispiel #1
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>());
            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.")));
        }
Beispiel #3
0
        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.")));
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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)));
        }
Beispiel #8
0
        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)));
        }