testes/src_2/services/serviceUtils.js

44 lines
1.5 KiB
JavaScript

/**
* Utilitários para a camada de serviços (DAL).
* Centraliza a lógica de alternância entre Mocks e API Real.
*/
// Define se o sistema deve usar mocks ou API real.
// Prioriza o .env, mas permite fallback para mock em desenvolvimento.
export const USE_MOCK = import.meta.env.VITE_USE_MOCK === 'true';
/**
* Simula latência de rede para uma experiência mais realista com Mocks.
* @param {any} data - Os dados que seriam retornados.
* @param {number} ms - Tempo em milissegundos.
*/
export const simulateLatency = (data, ms = 800) => {
console.log(`[MOCK] Simulating latency ${ms}ms for`, data);
return new Promise((res) => setTimeout(() => res(data), ms));
};
/**
* Helper para abstrair a decisão entre Mock e API.
* @param {Object} options - Opções da requisição.
* @param {Function} options.mockFn - Função que retorna o mock (deve retornar uma Promise).
* @param {Function} options.apiFn - Função que faz a chamada real via Axios.
*/
export const handleRequest = async ({ mockFn, apiFn }) => {
if (USE_MOCK && mockFn) {
console.log('[Service] Using MOCK');
return mockFn();
}
console.log('[Service] Calling API Real');
try {
const response = await apiFn();
// Padroniza o retorno para sempre devolver os dados
if (response === null || response === undefined) return null;
return response.data !== undefined ? response.data : response;
} catch (error) {
console.error('API Error:', error);
throw error;
}
};