コード例 #1
0
        public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name);

            input.MapExtraPropertiesTo(tenant);

            await TenantRepository.InsertAsync(tenant);

            await CurrentUnitOfWork.SaveChangesAsync();

            await DistributedEventBus.PublishAsync(
                new TenantCreatedEto
            {
                Id         = tenant.Id,
                Name       = tenant.Name,
                Properties =
                {
                    { "AdminEmail",    input.AdminEmailAddress },
                    { "AdminPassword", input.AdminPassword     }
                }
            });

            using (CurrentTenant.Change(tenant.Id, tenant.Name))
            {
                //TODO: Handle database creation?
                // TODO: Seeder might be triggered via event handler.
                await DataSeeder.SeedAsync(
                    new DataSeedContext(tenant.Id)
                    .WithProperty("AdminEmail", input.AdminEmailAddress)
                    .WithProperty("AdminPassword", input.AdminPassword)
                    );
            }

            return(ObjectMapper.Map <Tenant, TenantDto>(tenant));
        }
コード例 #2
0
    public virtual async Task <TenantDto> CreateAsync(TenantEditInput input)
    {
        var tenant = await TenantManager.CreateAsync(input.Name);

        tenant = await TenantRepository.InsertAsync(tenant);

        return(tenant.MapTo <TenantDto>());
    }
コード例 #3
0
        public virtual async Task CreateAsync(TTenant tenant)
        {
            await ValidateTenantAsync(tenant);

            if (await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenant.TenancyName) != null)
            {
                throw new UserFriendlyException(string.Format(L("TenancyNameIsAlreadyTaken"), tenant.TenancyName));
            }

            await TenantRepository.InsertAsync(tenant);
        }
コード例 #4
0
        public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name);

            await TenantRepository.InsertAsync(tenant);

            using (CurrentTenant.Change(tenant.Id, tenant.Name))
            {
                //TODO: Handle database creation?

                //TODO: Set admin email & password..?
                await DataSeeder.SeedAsync(tenant.Id);
            }

            return(ObjectMapper.Map <Tenant, TenantDto>(tenant));
        }
コード例 #5
0
ファイル: TenantManager.cs プロジェクト: llenroc/Movie
        public virtual async Task <IdentityResult> CreateAsync(TTenant tenant)
        {
            if (await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenant.TenancyName) != null)
            {
                return(IdentityResult.Failed(string.Format(L("TenancyNameIsAlreadyTaken"), tenant.TenancyName)));
            }
            var validationResult = await ValidateTenantAsync(tenant);

            if (!validationResult.Succeeded)
            {
                return(validationResult);
            }
            await TenantRepository.InsertAsync(tenant);

            return(IdentityResult.Success);
        }
コード例 #6
0
        public virtual async Task <SaasTenantDto> CreateAsync(SaasTenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name, input.EditionId);

            await TenantRepository.InsertAsync(tenant);

            using (CurrentTenant.Change(tenant.Id, tenant.Name))
            {
                //TODO: Handle database creation?

                await DataSeeder.SeedAsync(
                    new DataSeedContext(tenant.Id)
                    .WithProperty("AdminEmail", input.AdminEmailAddress)
                    .WithProperty("AdminPassword", input.AdminPassword)
                    );
            }

            return(ObjectMapper.Map <SaasTenant, SaasTenantDto>(tenant));
        }
コード例 #7
0
        public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name);

            input.MapExtraPropertiesTo(tenant);

            await TenantRepository.InsertAsync(tenant);

            using (CurrentTenant.Change(tenant.Id, tenant.Name)) {
                //TODO: 对新建的租户数据进行初始化

                await DataSeeder.SeedAsync(
                    new DataSeedContext (tenant.Id)
                    .WithProperty ("AdminEmail", input.AdminPhoneNumber)
                    .WithProperty("AdminPassword", input.AdminPassword)
                    );
            }

            return(ObjectMapper.Map <Tenant, TenantDto> (tenant));
        }
コード例 #8
0
ファイル: TenantAppService.cs プロジェクト: zjc-china/abp
        public virtual async Task<TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name);
            input.MapExtraPropertiesTo(tenant);

            await TenantRepository.InsertAsync(tenant);

            await CurrentUnitOfWork.SaveChangesAsync();

            using (CurrentTenant.Change(tenant.Id, tenant.Name))
            {
                //TODO: Handle database creation?

                await DataSeeder.SeedAsync(
                                new DataSeedContext(tenant.Id)
                                    .WithProperty("AdminEmail", input.AdminEmailAddress)
                                    .WithProperty("AdminPassword", input.AdminPassword)
                                );
            }

            return ObjectMapper.Map<Tenant, TenantDto>(tenant);
        }
コード例 #9
0
        public virtual async Task <TenantDto> CreateAsync(TenantCreateDto input)
        {
            var tenant = await TenantManager.CreateAsync(input.Name);

            input.MapExtraPropertiesTo(tenant);

            await TenantRepository.InsertAsync(tenant);

            await CurrentUnitOfWork.SaveChangesAsync();

            var createEventData = new CreateEventData
            {
                Id   = tenant.Id,
                Name = tenant.Name,
                AdminEmailAddress = input.AdminEmailAddress,
                AdminPassword     = input.AdminPassword
            };
            // 因为项目各自独立,租户增加时添加管理用户必须通过事件总线
            // 而 TenantEto 对象没有包含所需的用户名密码,需要独立发布事件
            await EventBus.PublishAsync(createEventData);

            return(ObjectMapper.Map <Tenant, TenantDto>(tenant));
        }
コード例 #10
0
        public async Task <RegisterTenantResult> Create(RegisterTenantInput input, CancellationToken ct)
        {
            using (DataFilter.Disable <IMultiTenant>())
            {
                var existsTenant = await TenantRepository.FindByNameAsync(input.Name, false, ct);

                if (existsTenant != null)
                {
                    throw new BusinessException(ScoringDomainErrorCodes.TenantAlreadyExists)
                          .WithData("name", input.Name);
                }
            }

            // Create tenant
            var tenant = await TenantManager.CreateAsync(input.Name);

            tenant = await TenantRepository.InsertAsync(tenant, true, ct);

            IdentityUser adminIdentity;

            using (CurrentTenant.Change(tenant.Id))
            {
                await DataSeeder.SeedAsync(
                    new DataSeedContext(tenant.Id)
                    .WithProperty("AdminEmail", input.AdminEmailAddress)
                    .WithProperty("AdminPassword", input.AdminPassword)
                    );

                adminIdentity = await UserManager.FindByEmailAsync(input.AdminEmailAddress);
            }

            var adminTokenDto = new RegisterAdminTokenDto(await AuthJwtProvider.GenerateJwt(adminIdentity, ct));
            var tenantDto     = ObjectMapper.Map <Tenant, TenantDto>(tenant);

            return(new RegisterTenantResult(adminTokenDto, tenantDto));
        }