sothis-contratacao-api/src/shared/apis/cepRestService.js

53 lines
2.0 KiB
JavaScript
Raw Normal View History

const axios = require("axios");
// Consulta o endereço completo usando a API externa de CEP
const getConsultaCep = async (rawCep, rawNumero) => {
if (!rawCep) {
throw new Error("cep é obrigatório");
}
const cep = String(rawCep).trim().replace(/\D/g, "");
if (cep.length !== 8) {
throw new Error("cep inválido, verifique se foram digitados apenas números");
}
// Número é opcional na consulta, mas se fornecido, deve ser uma string limpa
const numero = rawNumero ? String(rawNumero).trim() : "";
try {
const cepRestUrl = 'https://api.cep.rest/';
const address = await axios.post(cepRestUrl, { cep });
if (address.data && address.data.code === 404) {
return null; // Controller tratará como 'Endereço não encontrado'
} else if (address.data && address.data.code) {
throw new Error("Erro ao consultar o CEP na API externa");
} else {
if (numero) address.data.numero = numero;
return address.data;
}
} catch (error) {
console.error("Erro ao consultar o CEP:", error);
throw new Error("Erro ao consultar o CEP");
}
};
module.exports = { getConsultaCep };
/*
DESCRIÇÃO:
Este arquivo define um serviço para consultar endereços a partir de um CEP.
FLUXO:
1. É chamado principalmente pelo `contratacao.service.js`.
2. Recebe um CEP e um número.
3. Formata e valida o CEP.
4. Realiza uma requisição POST para a API externa `https://api.cep.rest/`.
5. Trata a resposta da API:
- Se o CEP não for encontrado (código 404), retorna `null`.
- Se houver outro erro na API, lança uma exceção.
- Se for bem-sucedido, anexa o número ao objeto de dados e retorna os dados do endereço.
6. Em caso de erro na comunicação, loga o erro e lança uma exceção genérica.
Este serviço abstrai a complexidade da comunicação com a API de CEP, fornecendo uma interface simples para outras partes da aplicação obterem dados de endereço.
*/