UNPKG

@dbs-portal/module-tenant-management

Version:

Tenant management and multi-tenancy support module

272 lines 6.13 kB
/** * Tenant Management Types */ import type { BaseEntity, ID, PaginatedResponse } from '@dbs-portal/core-shared'; /** * Tenant entity */ export interface Tenant extends BaseEntity { name: string; displayName: string; connectionString?: string; isActive: boolean; features: TenantFeature[]; settings: TenantSettings; statistics: TenantStatistics; metadata?: Record<string, any>; } /** * Tenant feature configuration */ export interface TenantFeature { name: string; displayName: string; isEnabled: boolean; value?: any; expiresAt?: Date; metadata?: Record<string, any>; } /** * Tenant settings */ export interface TenantSettings { maxUsers?: number; maxStorage?: number; allowedDomains?: string[]; customDomain?: string; theme?: string; timezone?: string; language?: string; emailSettings?: { fromEmail?: string; fromName?: string; smtpHost?: string; smtpPort?: number; smtpUsername?: string; smtpPassword?: string; useSsl?: boolean; }; } /** * Tenant statistics */ export interface TenantStatistics { userCount: number; activeUserCount: number; storageUsed: number; lastActivity?: Date; createdThisMonth: number; loginCount: number; apiCallCount: number; } /** * Create tenant request */ export interface CreateTenantRequest { name: string; displayName: string; connectionString?: string; isActive?: boolean; features?: Omit<TenantFeature, 'displayName'>[]; settings?: TenantSettings; metadata?: Record<string, any>; } /** * Update tenant request */ export interface UpdateTenantRequest { id: ID; name?: string; displayName?: string; connectionString?: string; isActive?: boolean; features?: Omit<TenantFeature, 'displayName'>[]; settings?: TenantSettings; metadata?: Record<string, any>; } /** * Tenant lookup DTO */ export interface TenantLookupDto { id: ID; name: string; displayName: string; isActive: boolean; } /** * Tenant list response */ export interface TenantsResponse extends PaginatedResponse<Tenant> { } /** * Tenant analytics data */ export interface TenantAnalytics { tenantId: ID; period: 'day' | 'week' | 'month' | 'year'; metrics: { userGrowth: Array<{ date: string; count: number; }>; activeUsers: Array<{ date: string; count: number; }>; storageUsage: Array<{ date: string; usage: number; }>; apiCalls: Array<{ date: string; count: number; }>; revenue?: Array<{ date: string; amount: number; }>; }; summary: { totalUsers: number; activeUsers: number; storageUsed: number; totalApiCalls: number; averageResponseTime: number; uptime: number; }; } /** * Tenant connection info */ export interface TenantConnection { tenantId: ID; connectionString: string; provider: 'sqlserver' | 'postgresql' | 'mysql' | 'sqlite'; isActive: boolean; lastTested?: Date; testResult?: { success: boolean; message?: string; responseTime?: number; }; } /** * Backup types */ export type BackupType = 'full' | 'incremental' | 'differential'; /** * Tenant backup info */ export interface TenantBackup { id: ID; tenantId: ID; name: string; description?: string; size: number; status: 'pending' | 'in_progress' | 'completed' | 'failed'; progress?: number; createdAt: Date; completedAt?: Date; downloadUrl?: string; error?: string; type?: BackupType; } /** * Tenant restore request */ export interface TenantRestoreRequest { tenantId: ID; backupId: ID; restoreData?: boolean; restoreSettings?: boolean; restoreUsers?: boolean; } /** * Available tenant features */ export interface AvailableFeature { name: string; displayName: string; description: string; category: string; defaultValue?: any; valueType: 'boolean' | 'number' | 'string' | 'object'; isRequired: boolean; dependencies?: string[]; } /** * Tenant context for multi-tenancy */ export interface TenantContext { currentTenant?: Tenant; availableTenants: TenantLookupDto[]; isLoading: boolean; switchTenant: (tenantId: ID) => Promise<void>; refreshTenants: () => Promise<void>; } /** * Tenant list props */ export interface TenantListProps { onTenantSelect?: (tenant: Tenant) => void; onTenantEdit?: (tenant: Tenant) => void; onTenantDelete?: (tenant: Tenant) => void; showActions?: boolean; selectable?: boolean; className?: string; } /** * Tenant form props */ export interface TenantFormProps { tenant?: Tenant; onSubmit?: (tenant: CreateTenantRequest | UpdateTenantRequest) => void; onCancel?: () => void; loading?: boolean; className?: string; } /** * Tenant detail props */ export interface TenantDetailProps { tenantId: ID; onEdit?: (tenant: Tenant) => void; onDelete?: (tenant: Tenant) => void; className?: string; } /** * Tenant switcher props */ export interface TenantSwitcherProps { placement?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'; showSearch?: boolean; showCreateButton?: boolean; onTenantCreate?: () => void; className?: string; } /** * Tenant feature manager props */ export interface TenantFeatureManagerProps { tenantId: ID; onFeatureUpdate?: (feature: TenantFeature) => void; className?: string; } /** * Tenant analytics props */ export interface TenantAnalyticsProps { tenantId: ID; period?: 'day' | 'week' | 'month' | 'year'; className?: string; } /** * Tenant backup manager props */ export interface TenantBackupManagerProps { tenantId: ID; onBackupCreate?: () => void; onBackupRestore?: (backup: TenantBackup) => void; className?: string; } //# sourceMappingURL=index.d.ts.map