import { Knex } from 'knex'; export interface ITenantMetadata { currencyCode: string; } export interface ITenant { id: number, organizationId: string, initializedAt: Date|null, seededAt: Date|null, builtAt: Date|null, createdAt: Date|null, metadata?: ITenantMetadata } export interface ITenantDBManager { constructor(); databaseExists(tenant: ITenant): Promise; createDatabase(tenant: ITenant): Promise; migrate(tenant: ITenant): Promise; seed(tenant: ITenant): Promise; setupKnexInstance(tenant: ITenant): Knex; getKnexInstance(tenantId: number): Knex; } export interface ITenantManager { tenantDBManager: ITenantDBManager; tenant: ITenant; constructor(): void; createTenant(): Promise; createDatabase(tenant: ITenant): Promise; hasDatabase(tenant: ITenant): Promise; dropTenant(tenant: ITenant): Promise; migrateTenant(tenant: ITenant): Promise; seedTenant(tenant: ITenant): Promise; setupKnexInstance(tenant: ITenant): Knex; getKnexInstance(tenantId: number): Knex; } export interface ISystemService { cache(); repositories(); knex(); dbManager(); }