edgar.mendez 93a2527e60 feat: update company management components and services
- 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.
2026-03-21 18:04:08 -06:00

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();