saveinmed/saveinmed-frontend/src/utils/authUtils.ts
Tiago Yamamoto b39caf0fd0 first commit
2025-12-17 13:58:26 -03:00

125 lines
No EOL
3.3 KiB
TypeScript

/**
* Utilidades para autenticação e dados do usuário
*/
export interface UserMeResponse {
id: string;
identificacao: string;
ativo: boolean;
superadmin: boolean;
'auth-id-appwrite': string | null;
nome: string;
email: string;
nivel: string;
'registro-completo': boolean;
enderecos: any[];
empresasDados: string[]; // ← Corrigido: é um array de strings (IDs diretos)
'nome-social': string;
cpf: string;
createdAt: string;
updatedAt: string;
}
/**
* Busca os dados do usuário logado através do endpoint /me
* @returns Promise com os dados do usuário ou null se erro
*/
export async function getUserMeData(): Promise<UserMeResponse | null> {
try {
const token = localStorage.getItem('access_token');
if (!token) {
console.error('🔑 Token de acesso não encontrado');
return null;
}
const response = await fetch(`${process.env.NEXT_PUBLIC_BFF_API_URL}/auth/me`, {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': `Bearer ${token}`,
},
});
if (!response.ok) {
console.error('❌ Erro ao buscar dados do usuário:', response.status, response.statusText);
return null;
}
const userData = await response.json();
return userData;
} catch (error) {
console.error('❌ Erro exception ao buscar dados do usuário:', error);
return null;
}
}
/**
* Extrai o empresa_id dos dados do usuário
* @param userData - Dados do usuário do endpoint /me
* @returns string com o empresa_id ou null se não encontrado
*/
export function extractEmpresaId(userData: UserMeResponse | null): string | null {
if (!userData) {
console.error('❌ Dados do usuário não fornecidos');
return null;
}
// Verifica se há empresas associadas
if (!userData.empresasDados) {
console.error('❌ empresasDados não encontrado');
return null;
}
// empresasDados deve ser um array de strings (IDs diretos)
if (Array.isArray(userData.empresasDados)) {
if (userData.empresasDados.length === 0) {
console.error('❌ Array empresasDados está vazio');
return null;
}
// Pega o primeiro ID do array
const primeiroEmpresaId = userData.empresasDados[0];
if (typeof primeiroEmpresaId === 'string' && primeiroEmpresaId.length > 0) {
return primeiroEmpresaId;
} else {
console.error('❌ Primeiro item do array não é uma string válida:', primeiroEmpresaId);
return null;
}
} else {
console.error('❌ empresasDados não é um array:', typeof userData.empresasDados);
return null;
}
}
/**
* Busca e retorna o empresa_id do usuário logado
* @returns Promise<string | null> - O ID da empresa ou null se erro
*/
export async function getCurrentUserEmpresaId(): Promise<string | null> {
try {
const userData = await getUserMeData();
if (!userData) {
console.error('❌ Falha ao obter dados do usuário do endpoint /me');
return null;
}
const empresaId = extractEmpresaId(userData);
if (!empresaId) {
console.error('❌ Falha ao extrair empresa_id dos dados do usuário');
return null;
}
return empresaId;
} catch (error) {
console.error('❌ Erro exception ao obter empresa_id do usuário:', error);
return null;
}
}