Este projeto é uma implementação de uma API REST para um sistema simples de contas a pagar. O sistema foi desenvolvido como parte de um desafio técnico e tem como objetivo fornecer uma API para realizar o CRUD de contas.
-
CRUD de Contas a Pagar:
- 📥 Cadastrar nova conta
- ✏️ Atualizar uma conta existente
- 🔄 Alterar a situação da conta (Pendente, Pago, etc.)
- 🔍 Consultar lista de contas com filtros (Data de Vencimento, Descrição)
- 🔎 Consultar conta por ID
- 💰 Consultar valor total pago por período
-
Importação de Contas via CSV:
- 📂 Importar lote de contas a pagar via upload de arquivo CSV
-
Autenticação e Segurança:
- 🔐 Mecanismo de autenticação para proteger as APIs
-
Estrutura de Banco de Dados:
- 🗄️ Utilização do PostgreSQL com migrações gerenciadas pelo Flyway
-
Persistência e Resiliência:
- 🛡️ Para garantir a persistência dos dados em caso de indisponibilidade do sistema, foi utilizado um mecanismo de enfileiramento de mensagens assíncronas, assegurando que as contas pagas não sejam perdidas.
-
Testes Unitários:
- 🧪 Implementação de testes unitários para garantir a qualidade do código
- POST
/auth/login
- Gera tokens de acesso e refresh tokens. - POST
/auth/refresh
- Gera um novo token de acesso usando um refresh token.
- POST
/contas/manage
- Cadastrar uma nova conta. - PUT
/contas/manage/{id}
- Atualizar uma conta existente. - PATCH
/contas/manage/{id}/situacao
- Alterar a situação de uma conta. - GET
/contas/manage
- Obter lista de contas com filtros (Data de Vencimento, Descrição). - GET
/contas/manage/{id}
- Obter conta por ID. - GET
/contas/manage/total-pago
- Obter valor total pago por período.
- DELETE
/contas/manage/{id}
- Deletar uma conta. - GET
/contas/manage/contagem-de-contas
- Obter contagem total de contas. - GET
/contas/manage/lista-de-contas-por-situacao
- Obter lista de contas filtradas por situação.
- POST
/contas/import/upload
- Importar contas via arquivo CSV.
- ☕ Java 21
- Spring Framework:
- 🥾 Spring Boot
- 📊 Spring Data JPA
- 🔒 Spring Security
- 📨 Spring Kafka
- 🐘 PostgreSQL
- 🚀 Flyway
- 🧪 JUnit 5 e Mockito para testes unitários
- 📜 Lombok
- 🔑 JWT (Json Web Token) para autenticação
- 📄 OpenCSV para manipulação de arquivos CSV
- Java 21 ou superior
- Maven
- Docker e Docker Compose
git clone https://github.com/FelipeAumannRS/totvs-desafio-felipe-aumann.git
cd totvs-desafio-felipe-aumann
mvn clean install
docker build -t totvs-app .
docker-compose up --build
Isso iniciará a aplicação, o banco de dados PostgreSQL e os outros serviços necessários em containers Docker.
Este projeto foi desenvolvido com a intenção de aproximar a aplicação da realidade, onde serviços intermitentes são comuns. Para garantir a integridade dos dados, foi implementado um mecanismo de enfileiramento de mensagens assíncronas, assegurando que as operações de salvar e editar contas sejam realizadas de forma confiável, mesmo em caso de indisponibilidade temporária dos serviços.