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)); }
public virtual async Task <TenantDto> CreateAsync(TenantEditInput input) { var tenant = await TenantManager.CreateAsync(input.Name); tenant = await TenantRepository.InsertAsync(tenant); return(tenant.MapTo <TenantDto>()); }
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); }
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)); }
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); }
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)); }
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)); }
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); }
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)); }
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)); }