Este projeto é uma aplicação NodeJS desenvolvida para atender o desafio técnico de backend da Green Acesso. O objetivo do projeto é importar arquivos CSV e PDF, realizar operações de mapeamento e exportação de boletos em PDF, e fornecer endpoints para consulta e geração de relatórios.
- Desenvolvido em NodeJS
- Utiliza banco de dados SQL (MySQL neste exemplo)
- Utiliza o framework Express
- Utiliza o ORM Sequelize para mapeamento objeto-relacional
- Manipulação de arquivos CSV e PDF
O cenário do problema envolve um condomínio chamado Condomínio Green Park, que utiliza dois aplicativos: um para controle de acesso da portaria e outro para gerenciamento das taxas condominiais do financeiro. O síndico decidiu exportar os boletos do financeiro e importá-los no aplicativo da portaria.
O projeto consiste em criar um endpoint para importar arquivos CSV contendo dados dos boletos e realizar o mapeamento dos boletos com os lotes correspondentes no sistema. Além disso, é necessário receber um arquivo PDF contendo os boletos em uma ordem específica, dividir o PDF em arquivos individuais por boleto e salvá-los em uma pasta no sistema. Por fim, é necessário implementar endpoints para consultar os boletos e gerar um relatório em PDF.
O endpoint desenvolvido permite a importação de um arquivo CSV contendo informações dos boletos. Os dados são extraídos do arquivo e salvos na tabela "boletos" do banco de dados.
O sistema externo fornece o nome da unidade (lote) no formato utilizado por eles, enquanto o sistema interno utiliza o nome do lote em um formato diferente. É necessário fazer o mapeamento entre os dois sistemas para descobrir o ID do lote no sistema interno e associá-lo aos boletos importados.
O endpoint recebe um arquivo PDF contendo os boletos em uma ordem fixa. Os boletos são desmembrados em arquivos individuais por boleto e salvos em uma pasta local. Cada arquivo é nomeado com o ID correspondente ao boleto na tabela "boletos".
OBS: Os arquivos estão na pasta uplouds na raiz do projeto.
O projeto possui um endpoint para consultar os boletos existentes no sistema. É possível realizar filtros por nome, faixa de valores e ID do lote.
O endpoint de relatório permite a geração de um arquivo PDF contendo um relatório dos boletos. O PDF é composto por uma tabela com os dados dos boletos solicitados.
Para iniciar o projeto, siga os passos abaixo:
-
Certifique-se de ter o Node.js instalado em sua máquina.
-
Faça o download ou clone este repositório.
-
No diretório raiz do projeto, execute o seguinte comando para instalar as dependências:
npm install
-
Certifique-se de ter um banco de dados MySQL configurado e atualize as informações de conexão no arquivo
.env
. -
Execute as migrações do Sequelize para criar as tabelas no banco de dados:
npm run migrate
-
Inicie o servidor:
npm start
-
O servidor estará em execução na porta especificada no arquivo
.env
. Você pode acessar os endpoints do projeto usando uma ferramenta como o Postman.
- OBS: A Collection está na pasta docs em src/assets.
- Todos Endpoints do projeto:
-
Importar boletos a partir de um arquivo CSV:
- Método: POST
- Rota:
/boletos/import
- Descrição: Recebe um arquivo CSV contendo os boletos e realiza a importação para o sistema.
-
Importar boletos a partir de um arquivo PDF:
- Método: POST
- Rota:
/boletos/import/pdf
- Descrição: Recebe um arquivo PDF contendo os boletos e realiza a importação para o sistema.
- OBS: Esse endpoint permite a importação de boletos a partir de um arquivo PDF, assim como o endpoint /boletos/import permite a importação a partir de um arquivo CSV.
-
Obter todos os boletos:
- Método: GET
- Rota:
/boletos
- Descrição: Retorna todos os boletos cadastrados no sistema.
-
Obter boletos com filtros:
- Método: GET
- Rota:
/boletos/filter
- Descrição: Retorna os boletos filtrados com base nos parâmetros informados.
- Parâmetros de consulta:
nome
(nome do sacado),valor_inicial
(valor mínimo),valor_final
(valor máximo) eid_lote
(ID do lote). - Exemplo:
http://localhost:3000/boletos/filter?nome=JOSE&valor_inicial=100&valor_final=200&id_lote=3
-
Gerar relatório de boletos em PDF:
- Método: GET
- Rota:
/boletos/report
- Descrição: Gera um relatório em formato PDF contendo uma tabela com os boletos cadastrados no sistema.
- Parâmetros de consulta:
relatorio=1
(para solicitar o relatório).
O projeto utiliza as seguintes dependências:
- csv-parser: Biblioteca para análise de arquivos CSV.
- dotenv: Biblioteca para carregar variáveis de ambiente a partir de um arquivo .env.
- express: Framework web utilizado para criar os endpoints da aplicação.
- multer: Middleware para lidar com o upload de arquivos.
- mysql2: Pacote para conexão e manipulação de banco de dados MySQL.
- pdfkit: Biblioteca para criação e manipulação de arquivos PDF.
- sequelize: ORM utilizado para mapeamento objeto-relacional.
- sequelize-cli: CLI do Sequelize para executar migrações e comandos do banco de dados.
Este projeto é uma solução para o desafio técnico backend da Green Acesso. Ele abrange as principais funcionalidades solicitadas e foi desenvolvido utilizando as tecnologias NodeJS, Express, Sequelize e outras bibliotecas relevantes.
Caso haja alguma dúvida ou problema durante a execução do projeto, não hesite em entrar em contato.
Aproveite o projeto e divirta-se explorando suas funcionalidades!