public async Task CreateTenant(CreateTenantInputDto inputDto) { if ((await _tenantManager.FindByTenancyNameAsync(inputDto.TenancyName)).IsNotNull()) { throw new HozaruException(string.Format("Toko Id {0} tidak bisa digunakan. Silahkan gunakan Toko Id lain.", inputDto.TenancyName)); } var district = _districtRepository.Get(inputDto.DistrictId); Validate.Found(district, "Kecamatan"); var tenant = new Tenant(inputDto.TenancyName, inputDto.Name, inputDto.WhatsappNumber, inputDto.Address, inputDto.Phone, district); var defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName); if (defaultEdition != null) { tenant.EditionId = defaultEdition.Id; } var createTenantResult = await _tenantManager.CreateAsync(tenant); createTenantResult.CheckErrors(); await CurrentUnitOfWork.SaveChangesAsync(); //To get new tenant's id. CurrentUnitOfWork.DisableFilter(HozaruDataFilters.MayHaveTenant); CurrentUnitOfWork.DisableFilter(HozaruDataFilters.MustHaveTenant); CurrentUnitOfWork.EnableFilter(HozaruDataFilters.MayHaveTenant); using (CurrentUnitOfWork.SetFilterParameter(HozaruDataFilters.MayHaveTenant, HozaruDataFilters.Parameters.TenantId, tenant.Id)) { IList <Role> createdRoles = await _roleAppService.CreateDefaultRoles(tenant.Id); foreach (var role in createdRoles) { await _roleManager.GrantAllPermissionsAsync(role); } await CurrentUnitOfWork.SaveChangesAsync(); //Create admin user for the tenant var adminUser = User.CreateTenantAdminUser(tenant, inputDto.AdminEmailAddress, inputDto.Password, inputDto.FirstName, inputDto.LastName); var createUserResult = await _userManager.CreateAsync(adminUser); createUserResult.CheckErrors(); await CurrentUnitOfWork.SaveChangesAsync(); //To get admin user's id var adminRole = _roleManager.Roles.Single(r => r.Name == "Admin"); //Assign admin user to role! var addRoleResult = await _userManager.AddToRoleAsync(adminUser.Id, adminRole.Name); addRoleResult.CheckErrors(); //await _tenantConfigurationAppService.CreateNew(tenant); await CurrentUnitOfWork.SaveChangesAsync(); } _apiKeyService.CreateApiKey(tenant.Id); }
public async Task <IActionResult> New(CreateTenantInputDto inputDto) { await _tenantAppService.CreateTenant(inputDto); return(Ok()); }