Este é um projeto que foi desenvolvido como um desafio técnico para uma vaga de backend. A API é responsável por gerenciar uma lista restrita de CPFs, permitindo a adição, remoção e consulta desses CPFs.
Atualmente o time de análise antifraude do ecommerce realiza um controle de CPFs em uma planilha eletrônica. Nesta planilha são adicionados CPFs com risco de fraude. Com o aumento da nossa base de clientes têm ficado cada vez mais difícil manter o controle manual. Com isso o Product Owner do time levantou os principais requisitos funcionais para desenvolvimento de um sistema que controle os CPFs adicionado-os em uma lista restrita.
- Nest.js - Framework para desenvolvimento de aplicações em Node.js.
- Prisma - ORM para bancos de dados SQL e NoSQL.
- Jest - Biblioteca de testes em JavaScript.
- Docker - Plataforma para desenvolvimento, envio e execução de aplicações.
- Swagger - Ferramenta para documentação de APIs.
- Joi - Biblioteca para validação de dados.
Para rodar a API, você precisará ter o Docker instalado na sua máquina. Se preferir, também é possível rodar a aplicação sem ele, basta seguir as instruções na seção "Rodando sem Docker".
- Clone o repositório:
git clone https://github.com/dev-luizf/cpf-control.git
- Entre na pasta do projeto:
cd cpf-control
- Crie um arquivo
.env
na raiz do projeto com as seguintes variáveis::
POSTGRES_USER=usuario_desejado
POSTGRES_PASSWORD=sua_senha
POSTGRES_DB=nome_do_banco
DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5433/${POSTGRES_DB}?schema=public"
- Rode o Docker Compose:
npm run compose:up
- Acesse a API em
http://localhost:3001
.
Se você preferir não utilizar o Docker, siga as instruções abaixo.
- Clone o repositório:
git clone https://github.com/dev-luizf/cpf-control.git
- Entre na pasta do projeto:
cd cpf-control
- Instale as dependências:
npm install
- Crie um arquivo
.env
na raiz do projeto com as seguintes variáveis:
DATABASE_URL="postgres://user:password@host:port/database?schema=schema_name"
Exemplo: DATABASE_URL="postgresql://luiz:123456@localhost:5432/cpf-control?schema=public"
- Inicie o servidor:
npm run dev
- Acesse a API em
http://localhost:3001
.
A API possui testes unitários escritos com a biblioteca Jest. Para roda-los, execute o seguinte comando:
npm run test
A API permite as seguintes operações:
- Adicionar um CPF à lista restrita.
- Listar todos os CPFs.
- Buscar um CPF específico na lista
- Remover um CPF da lista.
A documentação do projeto foi feita com Swagger e pode ser acessada em http://localhost:3001/api.
Este projeto é estruturado basicamente em controllers, services e utils. Os controllers são responsáveis por receber as requisições e chamar os serviços correspondentes. Os services, por sua vez, são responsáveis por lidar com as regras de negócio da aplicação e realizar as operações no banco de dados. Já os utils contêm funções utilitárias que podem ser utilizadas em diferentes partes da aplicação.
Em relação ao tratamento de erros, a API utiliza diferentes tipos de exceções. Quando ocorrem erros de validação dos dados, como CPFs inválidos ou em formato incorreto, eles são tratados nos controllers e retornam um erro do tipo "InvalidCpfException". Já exceções relacionadas às regras de negócio, como CPFs duplicados ou CPFs que não existem na lista restrita, são tratados nos services.
Essa separação de responsabilidades permite que a aplicação seja mais organizada e fácil de manter, já que cada parte tem uma responsabilidade clara e bem definida. Além disso, o tratamento de erros específicos permite que a aplicação forneça mensagens mais claras e descritivas para os usuários em caso de problemas, o que ajuda a melhorar a experiência de uso da aplicação.