public static void AddCustomDataContext( this IServiceCollection services, IConfiguration configuration) { services.AddScoped(provider => { var httpContextAccessor = provider.GetService <IHttpContextAccessor>(); var httpContext = httpContextAccessor.HttpContext; string tenantRoute = httpContext.GetTenantRoute(); //Validate tenant has access var masterContext = provider.GetService <AdminDataContext>(); if (masterContext.Tenants.Where(x => x.TenantRoute == tenantRoute).FirstOrDefault() == null) { throw new UnauthorizedAccessException("Tenant invalid"); } var connString = configuration.GetTenantConnectionString(tenantRoute); var opts = new DbContextOptionsBuilder <TenantDataContext>(); opts.UseNpgsql(connString, s => s .EnableRetryOnFailure() .MigrationsAssembly(typeof(Program).Assembly.FullName) ); opts.EnableSensitiveDataLogging(); var tenantDataContext = new TenantDataContext(opts.Options); tenantDataContext.Database.Migrate(); return(tenantDataContext); }); }
private static async void CreateAndMigrateDatabases(IHost host) { using (var scope = host.Services.CreateScope()) { var tenantService = scope.ServiceProvider.GetService <TenantService>(); var tenants = await tenantService.GetAllTenantsAsync(); foreach (var tenant in tenants) { try { Console.WriteLine($"checking db for {tenant.Id} : {tenant.Name}"); var optionsBuilder = new DbContextOptionsBuilder <TenantDataContext>(); optionsBuilder.UseMySql(tenant.ConnectionString()); var dbContext = new TenantDataContext(optionsBuilder.Options); TenantDataContextSeed.SeedAsync(dbContext, new CreateTenant() { UserId = Guid.Parse("08d84f75-8698-4cf5-82a3-094415fcd132"), Tenant = tenant }).Wait(); } catch (Exception exception) { Console.WriteLine(exception); } } } }
public static async Task SeedAsync(TenantDataContext dataContext, CreateTenant createTenant) { try { if (!dataContext.Projects.Any()) { Console.WriteLine("Adding data"); if (createTenant == null) { createTenant = new CreateTenant() { UserId = Guid.Parse("08d8419b-2bcb-4390-8b99-50960f9a3c59"), Tenant = { Name = "Hello" } }; } await AddData(dataContext, createTenant); } } catch (Exception exception) { Console.WriteLine(exception); } }
public async Task <IActionResult> GetContacts( [FromRoute] string tenantRoute, [FromServices] TenantDataContext context) { var customers = await context.Customers.ToListAsync(); return(Ok(customers)); }
public async Task ReturnsListOfJobs() { using (var context = new TenantDataContext(_dbOptions)) { var jobService = new Warehouse.Services.JobService(context); Assert.AreEqual(10, (await jobService.GetAllJobsAsync()).Count); } }
public async Task ReturnsCorrectJob() { using (var context = new TenantDataContext(_dbOptions)) { var jobService = new Warehouse.Services.JobService(context); var id = new Guid("0C8EBA6A-9765-43FB-A80D-A8C06D46AA2F"); var job = await jobService.GetJobAsync(id); job.Id.Should().Be(id); } }
public async Task ReturnsListOfValidJobs() { using (var context = new TenantDataContext(_dbOptions)) { var jobService = new Warehouse.Services.JobService(context); var jobs = await jobService.GetAllJobsAsync(); foreach (var job in jobs) { Assert.IsNotNull(job); } } }
public async Task <TenantConfig> CreateTenantAsync(CreateTenant createTenant) { var tenant = new TenantConfig() { Name = createTenant.Tenant.Name, DbName = $"warehousedb{createTenant.Tenant.Name}", DbServer = "localhost", DbUser = "******", DbPassword = "******", Accent = createTenant.Tenant.Accent, Avatar = createTenant.Tenant.Avatar, Description = createTenant.Tenant.Description }; if ((await _multiTenantContext.TenantConfigs.FirstOrDefaultAsync(x => x.Name == tenant.Name)) != null) { return(null); } await _multiTenantContext.TenantConfigs.AddAsync(tenant); var employment = new Employment() { TenantId = tenant.Id, UserId = createTenant.UserId }; await _multiTenantContext.Employments.AddAsync(employment); try { await _multiTenantContext.SaveChangesAsync(); var optionsBuilder = new DbContextOptionsBuilder <TenantDataContext>(); optionsBuilder.UseMySql(tenant.ConnectionString()); var dbContext = new TenantDataContext(optionsBuilder.Options); await TenantDataContextSeed.SeedAsync(dbContext, createTenant); return(tenant); } catch { return(null); } }
public async Task Setup() { _dbOptions = new DbContextOptionsBuilder <TenantDataContext>() .UseInMemoryDatabase(databaseName: "tenantdb").Options; using (var context = new TenantDataContext(_dbOptions)) { Console.WriteLine("Starting data seed"); await TenantDataContextTestSeed.SeedAsync(context, new CreateTenant() { Tenant = new TenantConfig() { Name = "Test" }, UserId = Guid.NewGuid() }); } }
public IList <T> GetDataFromStoredProcedure <T>(string connectionString, string storeName, IQueryInfo queryInfo, ref int totalRowCount) where T : new() { var context = new TenantDataContext(connectionString); var data = context.Database.QueryStore <T> ( storeName, ref totalRowCount, CommandType.StoredProcedure, queryInfo != null? new[] { new SqlParameter("@SearchString", queryInfo.SearchString), new SqlParameter("@Skip", queryInfo.Skip), new SqlParameter("@Take", queryInfo.Take) }:null ); return(data ?? new List <T>()); }
public ActionResult SeedEmailTemplates(Tenant tenant) { var selectedTenant = db.Tenants.Find(tenant.Id); if (selectedTenant != null) { var connectionString = selectedTenant.ConnectionString; if (!string.IsNullOrEmpty(connectionString)) { using (var tenantContext = new TenantDataContext()) { var emailTemplates = tenantContext.EmailTemplates.ToList(); using (var context = new GridDataContext(connectionString)) { // Select Admin as the Creator var selectedUser = context.Users.FirstOrDefault(u => u.Username == selectedTenant.Email); if (selectedUser != null) { foreach (var emailTemplate in emailTemplates) { context.EmailTemplates.Add(new Entities.Company.EmailTemplate { Name = emailTemplate.Name, Content = emailTemplate.Content, CreatedOn = DateTime.UtcNow, CreatedByUserId = selectedUser.Id }); } } context.SaveChanges(); return(RedirectToAction("Index")); } } } } return(View(tenant)); }
public ModuleService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }
public JobExtrasService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }
public RoomService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }
private static async Task AddData(TenantDataContext dataContext, CreateTenant createTenant) { var projectId = Guid.NewGuid(); var listId = Guid.NewGuid(); var userId = createTenant.UserId; var roomId = Guid.NewGuid(); var jobIds = new List <Guid>(); var jobEmployments = new List <JobEmployment>(); for (int i = 0; i < 10; i++) { var id = Guid.NewGuid(); jobIds.Add(id); jobEmployments.Add(new JobEmployment() { JobId = id, UserId = userId }); } jobIds[0] = new Guid("0C8EBA6A-9765-43FB-A80D-A8C06D46AA2F"); var user = new UserId() { Id = userId, JobEmployments = jobEmployments, ListEmployments = new List <ListEmployment>() { new ListEmployment() { ListId = listId, UserId = userId } }, ProjectEmployments = new List <ProjectEmployment>() { new ProjectEmployment() { ProjectId = projectId, UserId = userId } }, RoomMemberships = new List <RoomMembership>() { new RoomMembership() { RoomId = roomId, UserId = userId } } }; var statuses = new List <JobStatus>() { new JobStatus() { Id = Guid.NewGuid(), Colour = "#fec128", Name = "Todo", Finished = false }, new JobStatus() { Id = Guid.NewGuid(), Colour = "#f77d16", Name = "In progress", Finished = false }, new JobStatus() { Id = Guid.NewGuid(), Colour = "#03bbd3", Name = "Verify", Finished = false }, new JobStatus() { Id = Guid.NewGuid(), Colour = "#68B642", Name = "Completed", Finished = true }, }; var types = new List <JobType> { new JobType() { Id = Guid.NewGuid(), Colour = "#009688", Name = "Bug" }, new JobType() { Id = Guid.NewGuid(), Colour = "#9e9e9e", Name = "Feature" } }; var priorities = new List <JobPriority>() { new JobPriority() { Id = Guid.NewGuid(), Colour = "#ff5722", Name = "DEFCON 1" }, new JobPriority() { Id = Guid.NewGuid(), Colour = "#ff9800", Name = "DEFCON 2" }, new JobPriority() { Id = Guid.NewGuid(), Colour = "#ffc107", Name = "DEFCON 3" }, new JobPriority() { Id = Guid.NewGuid(), Colour = "#8bc34a", Name = "DEFCON 4" }, new JobPriority() { Id = Guid.NewGuid(), Colour = "#4caf50", Name = "DEFCON 5" } }; var project = new Project() { Created = DateTime.Now, Description = "Development project for development", Id = projectId, Name = "Development", Repo = "", Accent = "#1ad960", Avatar = "https://pbs.twimg.com/profile_images/1292028907101671425/pp02tz90_400x400.jpg" }; var list = new List() { Created = DateTime.Now, Description = "Phase-1 list", Id = listId, Name = "Phase-1", Project = project }; var jobs = new List <Job>(); var count = 0; foreach (var id in jobIds) { jobs.Add(new Job() { Created = DateTime.Now, Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", Id = id, Title = $"job #{count}", Project = project, List = list, Link = $"{createTenant.Tenant.Name}-{count}", AssociatedUrl = "harrisonbarker.co.uk", JobStatus = statuses[new Random().Next(0, statuses.Count)], JobPriority = priorities[new Random().Next(0, priorities.Count)], JobType = types[new Random().Next(0, types.Count)] }); count++; } var room = new Room() { Id = roomId, Chats = new List <Chat>(), Name = "General", Project = project }; var creationEvent = new Event() { Id = Guid.NewGuid(), Description = "Created new project", Name = "Creation", Project = project, Time = DateTime.Now }; dataContext.Events.Add(creationEvent); dataContext.UserIds.Add(user); dataContext.Projects.Add(project); dataContext.Lists.Add(list); dataContext.Jobs.AddRange(jobs); dataContext.Rooms.Add(room); dataContext.JobStatuses.AddRange(statuses); dataContext.JobTypes.AddRange(types); dataContext.JobPriorities.AddRange(priorities); await dataContext.SaveChangesAsync(); }
public TenantUserService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }
public ProjectService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }
public override bool CheckConnectionString(string connectionString) { var context = new TenantDataContext(connectionString); return(context.Database.Exists()); }
public ListService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }
public EventService(TenantDataContext tenantDataContext) { _tenantDataContext = tenantDataContext; }