@dbs-portal/module-tenant-management
Version:
Tenant management and multi-tenancy support module
272 lines • 6.13 kB
TypeScript
/**
* 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