Skip to content

Commit

Permalink
feat: Add new api to track data from Correios (#23)
Browse files Browse the repository at this point in the history
* feat: add new api to return track data

* feat: adjust loggin with the new data and icons

* test: fix tests according to new api data
  • Loading branch information
danilodecanini authored Apr 1, 2022
1 parent 699362b commit f40767d
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 56 deletions.
30 changes: 18 additions & 12 deletions @types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ export const enum Rota {

export interface Event {
codigo: string;
tipo: string;
dtHrCriado: string;
descricao: string;
dtHrCriado: string;
tipo: string;
unidade: Unidade;
unidadeDestino: Unidade | null;
comentario?: string;
Expand All @@ -50,19 +50,25 @@ export interface TipoPostal {
categoria: string;
}

export interface CorreiosResponse {
export interface ObjectItem {
codObjeto: string;
tipoPostal: TipoPostal;
dtPrevista: string;
modalidade: string;
eventos: Event[];
situacao: string;
autoDeclaracao: boolean;
encargoImportacao: boolean;
percorridaCarteiro: boolean;
modalidade: string;
tipoPostal: TipoPostal;
habilitaAutoDeclaracao: boolean;
permiteEncargoImportacao: boolean;
habilitaPercorridaCarteiro: boolean;
bloqueioObjeto: boolean;
arEletronico: boolean;
redis: boolean;
possuiLocker: boolean;
habilitaLocker: boolean;
habilitaCrowdshipping: boolean;
}

export interface CorreiosResponse {
objetos: ObjectItem[];
quantidade: number;
resultado: string;
versao: string;
}

export interface CorreiosError {
Expand Down
8 changes: 4 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ const run = async () => {

const data = await getData(code);

const events = data?.eventos || [];
const events = data?.objetos[0]?.eventos || [];

events?.reverse().forEach((event) => {
const { descricao, descricaoWeb, dtHrCriado, unidade, unidadeDestino } = event;
const { descricao, dtHrCriado, unidade, unidadeDestino } = event;

log(`==> ${getIcon(descricaoWeb)} ${chalk.bold(descricao)}`);
log(chalk.blackBright(`Data: ${dtHrCriado}`));
log(`==> ${getIcon(descricao)} ${chalk.bold(descricao)}`);
log(chalk.blackBright(`Data: ${new Date(dtHrCriado).toLocaleString()}`));
log(chalk.blackBright(`Local: ${getAddress(unidade)}`));

if (unidadeDestino) {
Expand Down
9 changes: 2 additions & 7 deletions src/utils/api.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import axios from 'axios';
import type { CorreiosError, CorreiosResponse } from '@types';

const baseURL = 'https://rastreamento.correios.com.br/app/resultado.php';
const baseURL = 'https://proxyapp.correios.com.br/v1/sro-rastro';

export const fetchObject = async (code: string) => {
const { data } = await axios.get<CorreiosResponse>(baseURL, {
params: {
objeto: code,
mqs: 'S',
},
});
const { data } = await axios.get<CorreiosResponse>(`${baseURL}/${code}`);

return data;
};
Expand Down
16 changes: 8 additions & 8 deletions src/utils/icon.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const iconByStatus: Record<string, string> = {
TRANSITO: "🚚",
"SAIU-ENTREGA-DESTINATARIO": "🙌",
ENTREGUE: "🎁",
PAR31: "🤑", // Pagamento confirmado
PAR17: "💸", // Aguardando pagamento
PAR21: "🔎", // Encaminhado para fiscalização aduaneira
RecebidoCorreiosBrasil: "🛬",
POSTAGEM: "📦",
"Objeto em trânsito - por favor aguarde": "🚚",
"Objeto saiu para entrega ao destinatário": "🙌",
"Objeto entregue ao destinatário": "🎁",
"Pagamento confirmado": "🤑",
"Aguardando o pagamento do despacho postal": "💸",
"Objeto encaminhado para fiscalização aduaneira": "🔎",
"Objeto recebido pelos correios do Brasil": "🛬",
"Objeto postado": "📦",
DEFAULT: "🚧"
};

Expand Down
38 changes: 21 additions & 17 deletions tests/utils/api.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,27 @@ describe('Função fetchObject', function() {

it('deve retornar os valores corretos da api dos correios', async () => {
const mockedResponse = {
codObjeto: 'codObjeto',
tipoPostal:
{
sigla: 'sigla',
descricao: 'descricao',
categoria: 'categoria',
},
dtPrevista: 'dtPrevista',
modalidade: 'modalidade',
eventos: [],
situacao: 'situacao',
autoDeclaracao: true,
encargoImportacao: true,
percorridaCarteiro: true,
bloqueioObjeto: true,
arEletronico: true,
redis: true,
objetos: [{
codObjeto: 'codObjeto',
tipoPostal:
{
sigla: 'sigla',
descricao: 'descricao',
categoria: 'categoria',
},
modalidade: 'modalidade',
eventos: [],
habilitaAutoDeclaracao: true,
permiteEncargoImportacao: true,
habilitaPercorridaCarteiro: true,
bloqueioObjeto: true,
possuiLocker: true,
habilitaLocker: true,
habilitaCrowdshipping: true,
}],
quantidade: 1,
resultado: "Todos os Eventos",
versao: "1.0.0"
};
makeCorreiosResponse(mockedResponse);
const result = await fetchObject('123');
Expand Down
16 changes: 8 additions & 8 deletions tests/utils/icon.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import { getIcon } from '../../src/utils';
describe('Função getIcon', function() {
it.each`
status | value
${'TRANSITO'} | ${'🚚'}
${'SAIU-ENTREGA-DESTINATARIO'} | ${'🙌'}
${'ENTREGUE'} | ${'🎁'}
${'PAR31'} | ${'🤑'}
${'PAR17'} | ${'💸'}
${'PAR21'} | ${'🔎'}
${'RecebidoCorreiosBrasil'} | ${'🛬'}
${'POSTAGEM'} | ${'📦'}
${'Objeto em trânsito - por favor aguarde'} | ${'🚚'}
${'Objeto saiu para entrega ao destinatário'} | ${'🙌'}
${'Objeto entregue ao destinatário'} | ${'🎁'}
${'Pagamento confirmado'} | ${'🤑'}
${'Aguardando o pagamento do despacho postal'} | ${'💸'}
${'Objeto encaminhado para fiscalização aduaneira'} | ${'🔎'}
${'Objeto recebido pelos correios do Brasil'} | ${'🛬'}
${'Objeto postado'} | ${'📦'}
${'DEFAULT'} | ${'🚧'}
${'RANDOM STATUS'} | ${'🚧'}
`('deve retornar os icones corretos de acordo com o mapeamento ', function({ status, value }) {
Expand Down

0 comments on commit f40767d

Please sign in to comment.