testes/src_2/services/authService.js

122 lines
4.2 KiB
JavaScript

import api from './api';
import { authMock } from './mocks/authMock';
import { handleRequest } from './serviceUtils';
import { extractUserFromToken } from '@/utils/jwtUtils';
/**
* Serviço de autenticação para o Integra Finance (PRALOG).
* Gerencia a comunicação com o endpoint /auth_pralog do backend.
*/
export const authService = {
/**
* Autentica um usuário no sistema Pralog.
*
* @param {string} email - Email do usuário
* @param {string} password - Senha do usuário
* @returns {Promise<{token: string, user: Object}>} Token de autenticação e dados do usuário
*
* @example
* const { token, user } = await authService.authenticatePralog('admin@pralog.com', 'admin123');
*/
authenticatePralog: (email, password) => handleRequest({
mockFn: () => authMock.authenticate(email, password),
apiFn: async () => {
try {
const response = await api.post('/auth_pralog', {
email,
password
});
// Data Mapping: Backend retorna apenas { token }
// Precisamos criar o objeto user a partir do email fornecido
const { token } = response.data;
if (!token) {
throw new Error('Token não retornado pelo servidor');
}
// Extrai informações do token JWT
const tokenData = extractUserFromToken(token);
// Criar objeto user com dados do token e do email fornecido
const user = {
id: null, // Backend não retorna ID na autenticação
name: email.split('@')[0], // Extrai nome do email
email: tokenData?.email || email,
database: tokenData?.database || null, // Database do JWT
role: 'user', // Role padrão
permissions: [] // Permissões podem ser obtidas em outra rota
};
// Retorna no formato esperado pelo hook
return { token, user };
} catch (error) {
// Tratamento de erros específicos
if (error.response) {
// Erro retornado pelo servidor
const status = error.response.status;
const message = error.response.data?.message || 'Erro ao autenticar';
if (status === 401) {
throw new Error('Credenciais inválidas. Verifique seu email e senha.');
} else if (status === 403) {
throw new Error('Acesso negado. Você não tem permissão para acessar este sistema.');
} else if (status === 500) {
throw new Error('Erro no servidor. Tente novamente mais tarde.');
} else {
throw new Error(message);
}
} else if (error.request) {
// Requisição foi feita mas não houve resposta
throw new Error('Não foi possível conectar ao servidor. Verifique sua conexão.');
} else {
// Erro na configuração da requisição
throw new Error('Erro ao processar a requisição: ' + error.message);
}
}
}
}),
/*
* Autentica um usuário no sistema de Monitoramento de Frota (Pralog Frota).
*/
loginMonitoramento: (email, password) => handleRequest({
mockFn: () => authMock.authenticate(email, password),
apiFn: async () => {
const response = await api.post('/auth_pralog', {
email,
password
});
const { token } = response.data;
const tokenData = extractUserFromToken(token);
const user = {
id: null,
name: email.split('@')[0],
email: tokenData?.email || email,
database: tokenData?.database || null,
role: 'user',
permissions: [],
authorizedEnvironments: { rh: true }
};
return { token, user };
}
}),
/**
* Valida se um token ainda é válido.
*
* @param {string} token - Token a ser validado
* @returns {Promise<boolean>} True se o token é válido
*/
validateToken: (token) => handleRequest({
mockFn: async () => {
// Mock sempre retorna válido se houver token
return { valid: !!token };
},
apiFn: async () => {
const response = await api.post('/auth_pralog/validate', { token });
return response.data;
}
})
};