All files / src/utils companyErrors.ts

53.62% Statements 37/69
50% Branches 3/6
42.85% Functions 3/7
53.62% Lines 37/69

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 911x         1x     1x 1x 1x 1x 1x 1x             1x       1x 1x           1x   1x 1x           1x   1x 1x     1x   1x 1x 1x 1x 1x     1x   1x 1x             1x 1x 1x           1x 1x 1x 1x 1x 1x 1x 1x                    
import {
	VALID_BUSINESS_TYPES,
	VALID_EMPLOYEE_RANGES,
} from '../constants/businessTypes';
 
export class CompanyError extends Error {
	public errorCode: string;
 
	constructor(message: string, errorCode: string) {
		super(message);
		this.name = this.constructor.name;
		this.errorCode = errorCode;
	}
}
 
/**
 * Logs company-related errors
 * @param {string} functionName - Name of the function where the error occurred
 * @param {unknown} error - The error object
 */
export function logCompanyError(functionName: string, error: unknown): void {
	console.error(`Error in CompanyService.${functionName}:`, error);
}
 
export class InvalidBusinessTypeError extends CompanyError {
	constructor(businessType: string) {
		super(
			`El tipo de empresa '${businessType}' no es válido.  Debe ser uno de los siguientes: ${VALID_BUSINESS_TYPES.join(', ')}`,
			'INVALID_BUSINESS_TYPE'
		);
	}
}
 
export class InvalidEmployeeRangeError extends CompanyError {
	constructor(employeeRange: string) {
		super(
			`El rango de empleados '${employeeRange}' no es válido. Debe ser uno de los siguientes: ${VALID_EMPLOYEE_RANGES.join(', ')}`,
			'INVALID_EMPLOYEE_RANGE'
		);
	}
}
 
export class DuplicateNITError extends CompanyError {
	constructor(nit: string) {
		super(`Ya existe una empresa con el NIT '${nit}'`, 'DUPLICATE_NIT');
	}
}
 
export class CompanyNotFoundError extends CompanyError {
	constructor(nit: string) {
		super(`No se encontró la empresa con el NIT '${nit}'`, 'COMPANY_NOT_FOUND');
	}
}
 
// Función para crear respuestas de error estandarizadas
export function createCompanyErrorResponse(error: any, defaultMessage: string) {
	// Error específico de empresa
	if (error instanceof CompanyError) {
		if (error instanceof DuplicateNITError) {
			return {
				status: 409,
				message: error.message,
				errorCode: error.errorCode,
			};
		} else if (
			error instanceof InvalidBusinessTypeError ||
			error instanceof InvalidEmployeeRangeError
		) {
			return {
				status: 400,
				message: error.message,
				errorCode: error.errorCode,
			};
		} else if (error instanceof CompanyNotFoundError) {
			return {
				status: 404,
				message: error.message,
				errorCode: error.errorCode,
			};
		}
	}
 
	// Error genérico
	console.error('Error en el servicio de empresas:', error);
	return {
		status: 500,
		message: defaultMessage,
		errorCode: 'INTERNAL_SERVER_ERROR',
	};
}