125 lines
No EOL
3.3 KiB
TypeScript
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;
|
|
}
|
|
} |