public void Test_TenantAddUpdate_Bad_3() { var model = new TenantBase(); testContext.WriteLine($"{model.ToString()}"); tp.TenantAddUpdate(model); }
protected virtual void CreateOrMigrate(TenantBase tenant) { var args = new DbPerTenantConnectionStringResolveArgs( tenant == null ? (int?)null : (int?)tenant.Id, tenant == null ? MultiTenancySides.Host : MultiTenancySides.Tenant ); args["DbContextType"] = typeof(TDbContext); args["DbContextConcreteType"] = typeof(TDbContext); var nameOrConnectionString = ConnectionStringHelper.GetConnectionString(_connectionStringResolver.GetNameOrConnectionString(args)); using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress)) { using (var dbContext = _iocResolver.ResolveAsDisposable <TDbContext>(new { nameOrConnectionString = nameOrConnectionString })) { var dbInitializer = new MigrateDatabaseToLatestVersion <TDbContext, TConfiguration>( true, new TConfiguration { Tenant = tenant }); dbInitializer.InitializeDatabase(dbContext.Object); _unitOfWorkManager.Current.SaveChanges(); uow.Complete(); } } }
public void Update(TenantBase linkedTenant) { if (linkedTenant.TenantItemId == 0) { throw new ApplicationException("The linkedTenant must be already in the database."); } LinkedTenant = linkedTenant; }
public UserDataHierarchical(string userId, TenantBase linkedTenant) : base(userId) { if (linkedTenant.TenantItemId == 0) { throw new ApplicationException("The linkedTenant must be already in the database."); } LinkedTenant = linkedTenant; }
public virtual void CreateOrMigrateForTenant(TenantBase tenant) { if (tenant.ConnectionString.IsNullOrEmpty()) { return; } CreateOrMigrate(tenant); }
public void Test_TenantAddUpdate_Bad_2() { var model = new TenantBase(); var id = Guid.Empty; model.Contact = new ContactBase() { TenantId = id, DisplayName = id.ToString() }; tp.TenantAddUpdate(model); }
private async Task CheckAddUser(string email, string rolesCommaDelimited, TenantBase linkedTenant) { var user = await _userManager.CheckAddNewUserAsync(email, email); //password is their email foreach (var roleName in rolesCommaDelimited.Split(',').Select(x => x.Trim())) { _extraService.CheckAddRoleToUser(user.Id, roleName); } _extraService.AddUpdateDataAccessHierarchical(user.Id, linkedTenant); _extraService.CheckAddModules(user.Id, linkedTenant); }
/// <summary> /// This adds if not present a ModulesForUser for a user, using the user's Company's Modules settings. /// </summary> /// <param name="userId"></param> /// <param name="linkToTenant"></param> public void CheckAddModules(string userId, TenantBase linkToTenant) { if (_context.Find <ModulesForUser>(userId) == null) { var company = _context.Find <Company>(linkToTenant.ExtractCompanyId()); if (company == null) { throw new NullReferenceException($"Could not find the company with primary key of {linkToTenant.ExtractCompanyId()}."); } var dataAccess = new ModulesForUser(userId, company.AllowedPaidForModules); _context.Add(dataAccess); } }
public void CheckAddDataAccessHierarchical(string userId, TenantBase linkedTenant) { if (linkedTenant == null) { throw new ArgumentNullException(nameof(linkedTenant)); } if (_context.Find <UserDataHierarchical>(userId) == null) { var dataAccess = new UserDataHierarchical(userId, linkedTenant); _context.Add(dataAccess); } }
private string HtmlDisplayTenant(TenantBase tenant, int indent) { var result = "<tr>"; for (int i = 0; i < indent; i++) { result += "<td></td>"; } result += $"<td>{tenant.GetType().Name}</td>" + $"<td>{tenant.Name}</td>" + $"<td>DataKey = {tenant.DataKey}</td>" + "</tr>"; return(result); }
public static void BuildDemoData() { foreach (var t in Tenants) { var model = new TenantBase() { _id = t, Contact = new ContactBase() { DisplayName = t.ToString(), TenantId = t, ContactName = t.ToString() }, Configuration = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("TenantDb", t.ToString()) } }; Console.WriteLine(model.ToString()); TenantProvider.TenantAddUpdate(model); } int ct = 0; foreach (var u in Usernames) { var model = new TenantUserProfileBase() { UniqueUserId = u, _id = Guid.NewGuid(), }; if (ct % 2 == 0) { model.Tenants.Add(Tenants[0]); } else { model.Tenants.Add(Tenants[1]); } model.SettingsPut("ct", ct.ToString()); Console.WriteLine(model.ToString()); UserProvider.Write(model); ct++; } }
/// <summary> /// This adds a UserDataHierarchical if not present, or updates the linked tenant if is present. /// </summary> /// <param name="userId"></param> /// <param name="linkedTenant"></param> public void AddUpdateDataAccessHierarchical(string userId, TenantBase linkedTenant) { if (linkedTenant == null) { throw new ArgumentNullException(nameof(linkedTenant)); } var dataLink = _context.Find <UserDataHierarchical>(userId); if (dataLink == null) { dataLink = new UserDataHierarchical(userId, linkedTenant); _context.Add(dataLink); } else { dataLink.Update(linkedTenant); } }
private static void MakeTenants(int count) { for (int i = 0; i < count; i++) { var tenantId = Guid.NewGuid(); var model = new TenantBase { _id = tenantId, Contact = new ContactBase() { DisplayName = tenantId.ToString(), ContactEmail = $"{tenantId}@my.co", ContactName = $"", ContactPhone = "" } }; var config = new List <KeyValuePair <string, string> >(); foreach (var k in ConfigKeys) { var kv = new KeyValuePair <string, string>(k, Faker.Lorem.Word()); config.Add(kv); } model.Configuration = MakeConfigs(); Tenants.Add(tenantId); tp.TenantAddUpdate(model); } }
public UserDataHierarchical(string userId, TenantBase linkedTenant) : base(userId) { Update(linkedTenant); }
public void Test_TenantAddUpdate_Bad_3() { var model = new TenantBase(); tp.TenantAddUpdate(model); }
public static List <Company> AddCompanyAndChildrenInDatabase(this CompanyDbContext context, params string[] companyDefinitions) { if (!companyDefinitions.Any()) { companyDefinitions = new[] { "4U Inc.|West Coast|San Fran|SF Dress4U, SF Tie4U, SF Shirt4U", "4U Inc.|West Coast|LA|LA Dress4U, LA Tie4U, LA Shirt4U" } } ; var companyDict = new Dictionary <string, Company>(); var subGroupsDict = new Dictionary <int, List <SubGroup> >(); foreach (var companyDefinition in companyDefinitions) { var hierarchyNames = companyDefinition.Split('|'); if (!companyDict.ContainsKey(hierarchyNames[0])) { companyDict[hierarchyNames[0]] = Company.AddTenantToDatabaseWithSaveChanges( hierarchyNames[0], PaidForModules.None, context); subGroupsDict.Clear(); } TenantBase parent = companyDict[hierarchyNames[0]]; for (int i = 1; i < hierarchyNames.Length; i++) { if (!subGroupsDict.ContainsKey(i)) { subGroupsDict[i] = new List <SubGroup>(); } if (i + 1 == hierarchyNames.Length) { //End, which are shops var shopNames = hierarchyNames[i].Split(',').Select(x => x.Trim()); foreach (var shopName in shopNames) { RetailOutlet.AddTenantToDatabaseWithSaveChanges(shopName, parent, context); } } else { //Groups SubGroup subGroup = null; if (subGroupsDict[i].Any(x => x.Name == hierarchyNames[i])) { subGroup = subGroupsDict[i].Single(x => x.Name == hierarchyNames[i]); } else { subGroup = SubGroup.AddTenantToDatabaseWithSaveChanges(hierarchyNames[i], parent, context); subGroupsDict[i].Add(subGroup); } parent = subGroup; } } } return(new List <Company>(companyDict.Values)); } }