44 lines
1.5 KiB
JavaScript
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;
|
|
}
|
|
};
|