124 lines
3.9 KiB
TypeScript
124 lines
3.9 KiB
TypeScript
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<PaginatedResponse<Company> | 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<Company>;
|
|
}
|
|
|
|
// 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<Company> {
|
|
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<CompanyCreateResponse> {
|
|
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<CompanyFormData>): Promise<Company> {
|
|
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<void> {
|
|
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<Company[]> {
|
|
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();
|