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