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