UNPKG

@dbs-portal/module-tenant-management

Version:

Tenant management and multi-tenancy support module

198 lines 5.74 kB
/** * Tenant Service - Handles tenant CRUD operations and management */ import { HttpClient } from '@dbs-portal/core-api'; export class TenantService { httpClient; constructor(baseURL) { this.httpClient = new HttpClient({ baseURL: baseURL || '/api/tenants' }); } /** * Get all tenants with pagination and filtering */ async getTenants(page = 1, pageSize = 10, search, isActive, sortBy, sortOrder) { const params = new URLSearchParams({ page: page.toString(), pageSize: pageSize.toString() }); if (search) params.append('search', search); if (isActive !== undefined) params.append('isActive', isActive.toString()); if (sortBy) params.append('sortBy', sortBy); if (sortOrder) params.append('sortOrder', sortOrder); const response = await this.httpClient.get(`?${params}`); return response.data; } /** * Get tenant by ID */ async getTenant(id) { const response = await this.httpClient.get(`/${id}`); return response.data; } /** * Create new tenant */ async createTenant(tenant) { const response = await this.httpClient.post('/', tenant); return response.data; } /** * Update existing tenant */ async updateTenant(tenant) { const { id, ...updateData } = tenant; const response = await this.httpClient.put(`/${id}`, updateData); return response.data; } /** * Delete tenant */ async deleteTenant(id) { await this.httpClient.delete(`/${id}`); } /** * Get tenant lookup data (for dropdowns, etc.) */ async getTenantLookup() { const response = await this.httpClient.get('/lookup'); return response.data; } /** * Activate tenant */ async activateTenant(id) { await this.httpClient.post(`/${id}/activate`); } /** * Deactivate tenant */ async deactivateTenant(id) { await this.httpClient.post(`/${id}/deactivate`); } /** * Get tenant analytics */ async getTenantAnalytics(id, period = 'month') { const response = await this.httpClient.get(`/${id}/analytics?period=${period}`); return response.data; } /** * Test tenant connection */ async testTenantConnection(id) { const response = await this.httpClient.post(`/${id}/test-connection`); return response.data; } /** * Update tenant connection string */ async updateTenantConnection(id, connectionString) { await this.httpClient.put(`/${id}/connection`, { connectionString }); } /** * Get available features */ async getAvailableFeatures() { const response = await this.httpClient.get('/features/available'); return response.data; } /** * Update tenant features */ async updateTenantFeatures(id, features) { await this.httpClient.put(`/${id}/features`, { features }); } /** * Create tenant backup */ async createTenantBackup(id, name, description, options) { const response = await this.httpClient.post(`/${id}/backups`, { name, description, ...options }); return response.data; } /** * Get tenant backups */ async getTenantBackups(id) { const response = await this.httpClient.get(`/${id}/backups`); return response.data; } /** * Restore tenant from backup */ async restoreTenantFromBackup(request) { await this.httpClient.post(`/${request.tenantId}/restore`, request); } /** * Delete tenant backup */ async deleteTenantBackup(tenantId, backupId) { await this.httpClient.delete(`/${tenantId}/backups/${backupId}`); } /** * Get tenant statistics summary */ async getTenantStatistics() { const response = await this.httpClient.get('/statistics'); return response.data; } /** * Bulk operations on tenants */ async bulkActivateTenants(tenantIds) { await this.httpClient.post('/bulk/activate', { tenantIds }); } async bulkDeactivateTenants(tenantIds) { await this.httpClient.post('/bulk/deactivate', { tenantIds }); } async bulkDeleteTenants(tenantIds) { await this.httpClient.delete('/bulk', { data: { tenantIds } }); } /** * Export tenant data */ async exportTenantData(id, format = 'json') { const response = await this.httpClient.get(`/${id}/export?format=${format}`, { responseType: 'blob' }); return response.data; } /** * Import tenant data */ async importTenantData(id, file, options) { const formData = new FormData(); formData.append('file', file); if (options?.overwrite) formData.append('overwrite', 'true'); if (options?.validateOnly) formData.append('validateOnly', 'true'); const response = await this.httpClient.post(`/${id}/import`, formData, { headers: { 'Content-Type': 'multipart/form-data' } }); return response.data; } /** * Clone tenant */ async cloneTenant(sourceId, newName, newDisplayName, options) { const response = await this.httpClient.post(`/${sourceId}/clone`, { name: newName, displayName: newDisplayName, ...options }); return response.data; } } //# sourceMappingURL=tenant-service.js.map