114 lines
No EOL
2.8 KiB
TypeScript
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' })
|
|
}; |