- Upgrade vue-tsc to version 3.2.6 in package.json. - Refactor Companies.vue to replace address column with domains_count and update company service references. - Modify CompaniesForm.vue to include new fields for email, primary domain, and certificate files, and adjust validation logic. - Revamp companies.service.ts to implement new API endpoints for tenant management and improve error handling. - Introduce companies.mapper.ts for payload transformation between form data and API requirements. - Update companies.types.ts to reflect changes in data structure and types for better type safety.
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import api from '@/services/api';
|
|
import {
|
|
buildCreateTenantPayload,
|
|
buildUpdateTenantPayload,
|
|
tenantPayloadToFormData,
|
|
} from './companies.mapper';
|
|
import type { CompaniesPagination, TenantFormData } from './companies.types';
|
|
|
|
/**
|
|
* Servicio para obtener todas las empresas (tenants) con paginación.
|
|
*/
|
|
export class CompaniesService {
|
|
/**
|
|
* Obtiene todas las empresas del sistema.
|
|
* @returns Promesa con la respuesta paginada de empresas
|
|
*/
|
|
public async getAll(page = 1): Promise<CompaniesPagination> {
|
|
try {
|
|
const response = await api.get('/api/admin/admin/tenants', {
|
|
params: { page },
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('Error al obtener empresas:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Crea una empresa (tenant) usando multipart/form-data.
|
|
*/
|
|
public async create(data: TenantFormData): Promise<void> {
|
|
try {
|
|
const payload = buildCreateTenantPayload(data);
|
|
const formData = tenantPayloadToFormData(payload);
|
|
await api.post('/api/admin/admin/tenants', formData, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
},
|
|
});
|
|
} catch (error) {
|
|
console.error('Error al crear empresa:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Actualiza una empresa (tenant) usando POST + _method=PUT para multipart.
|
|
*/
|
|
public async update(id: number, data: TenantFormData): Promise<void> {
|
|
try {
|
|
const payload = buildUpdateTenantPayload(data);
|
|
const formData = tenantPayloadToFormData(payload, { forcePut: true });
|
|
await api.post(`/api/admin/admin/tenants/${id}`, formData, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
},
|
|
});
|
|
} catch (error) {
|
|
console.error('Error al actualizar empresa:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Elimina una empresa por su ID.
|
|
* @param id ID de la empresa
|
|
*/
|
|
public async delete(id: number): Promise<void> {
|
|
try {
|
|
await api.delete(`/api/admin/admin/tenants/${id}`);
|
|
} catch (error) {
|
|
console.error('Error al eliminar empresa:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
export const companiesService = new CompaniesService();
|