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

114 lines
No EOL
2.8 KiB
TypeScript

/**
* Serviço para gerenciar endereços via BFF
*/
const BFF_BASE_URL = process.env.NEXT_PUBLIC_BFF_API_URL!;
/**
* Interface para endereço
*/
export interface Endereco {
$id?: string;
id?: string;
cep: string;
logradouro: string;
numero: string;
complemento?: string;
bairro: string;
cidade: string;
estado: string;
pais?: string;
principal?: boolean;
$createdAt?: string;
$updatedAt?: string;
}
/**
* Serviço de endereços
*/
export const enderecoService = {
/**
* Busca um endereço por ID
* @param enderecoId - ID do endereço
* @returns Dados do endereço
*/
buscarPorId: async (enderecoId: string): Promise<Endereco | null> => {
try {
const token = localStorage.getItem('access_token');
if (!token) {
throw new Error('Token de autenticação não encontrado');
}
const response = await fetch(`${BFF_BASE_URL}/enderecos/${enderecoId}`, {
method: 'GET',
headers: {
'accept': 'application/json',
'Authorization': `Bearer ${token}`,
},
});
if (!response.ok) {
const errorText = await response.text();
console.error(`❌ Erro ao buscar endereço:`, errorText);
throw new Error(`Erro ao buscar endereço: ${response.status}`);
}
const endereco = await response.json();
return endereco;
} catch (error) {
console.error('❌ Erro no enderecoService.buscarPorId:', error);
throw error;
}
},
/**
* Busca endereço por CEP usando API pública
*/
buscarPorCep: async (cep: string): Promise<Partial<Endereco> | null> => {
try {
const cleanCep = cep.replace(/\D/g, '');
if (cleanCep.length !== 8) return null;
const response = await fetch(`https://cep.awesomeapi.com.br/json/${cleanCep}`);
if (!response.ok) return null;
const data = await response.json();
return {
cep: data.cep,
logradouro: data.address,
bairro: data.district,
cidade: data.city,
estado: data.state,
// AwesomeAPI retorna 'address', 'district', 'city', 'state', 'lat', 'lng'
};
} catch (error) {
console.error('❌ Erro ao buscar CEP:', error);
return null;
}
},
/**
* Busca endereços por usuário (mantido para compatibilidade)
*/
buscarPorUserId: async () => ({ data: [], total: 0 }),
/**
* Cria um novo endereço (mantido para compatibilidade)
*/
criar: async () => ({ success: false, message: 'Service removido' }),
/**
* Atualiza um endereço (mantido para compatibilidade)
*/
atualizar: async () => ({ success: false, message: 'Service removido' }),
/**
* Exclui um endereço (mantido para compatibilidade)
*/
excluir: async () => ({ success: false, message: 'Service removido' })
};