import api from '@/services/api'; import type { Company, CompanyCreateResponse, CompanyFormData, CompanyQueryParams, PaginatedResponse } from './companies.types'; export class CompanyService { /** * Obtener todas las empresas con paginación y filtros opcionales */ async getAll(params?: CompanyQueryParams): Promise | Company[]> { try { const response = await api.get('api/catalogs/companies', { params }); // Si la respuesta tiene paginación, devolver el objeto completo if (response.data.current_page !== undefined) { return response.data as PaginatedResponse; } // Si no tiene paginación, devolver solo el array de data return response.data.data as Company[]; } catch (error: any) { console.error('Error al obtener empresas:', error); throw error; } } /** * Obtener una empresa por ID */ async getById(id: number): Promise { try { const response = await api.get(`api/catalogs/companies/${id}`); return response.data; } catch (error: any) { console.error(`Error al obtener empresa con ID ${id}:`, error); throw error; } } /** * Crear una nueva empresa */ async create(data: CompanyFormData): Promise { try { const response = await api.post('api/catalogs/companies', data); return response.data; } catch (error: any) { console.error('Error al crear empresa:', error); // Mejorar el mensaje de error si viene del backend if (error.response?.data) { throw { ...error, message: error.response.data.message || error.response.data.error || 'Error al crear la empresa' }; } throw error; } } /** * Actualizar una empresa existente */ async update(id: number, data: Partial): Promise { try { const response = await api.put(`api/catalogs/companies/${id}`, data); return response.data; } catch (error: any) { console.error(`Error al actualizar empresa con ID ${id}:`, error); // Mejorar el mensaje de error si viene del backend if (error.response?.data) { throw { ...error, message: error.response.data.message || error.response.data.error || 'Error al actualizar la empresa' }; } throw error; } } /** * Eliminar una empresa */ async delete(id: number): Promise { try { await api.delete(`api/catalogs/companies/${id}`); } catch (error: any) { console.error(`Error al eliminar empresa con ID ${id}:`, error); // Mejorar el mensaje de error si viene del backend if (error.response?.data) { throw { ...error, message: error.response.data.message || error.response.data.error || 'Error al eliminar la empresa' }; } throw error; } } /** * Buscar empresas por múltiples criterios */ async search(params: CompanyQueryParams): Promise { try { const response = await api.get('api/catalogs/companies', { params: { ...params, paginate: false } }); return response.data.data; } catch (error: any) { console.error('Error al buscar empresas:', error); throw error; } } }; // Exportar una instancia única del servicio export const companyService = new CompanyService();