Este projeto é uma API RESTful utilizando Spring Boot e Java 21. Ele inclui a configuração inicial do projeto, modelos básicos e endpoints para manipulação de dados em um banco de dados PostgreSQL.
project-root/
├── application/
│ ├── config/
│ ├── controllers/
│ ├── dtos/
│ ├── mappers/
│ ├── services/
│ └── validators/
├── domain/
│ ├── inbound/
│ ├── models/
│ └── outbound/
├── infrastructure/
│ ├── adapters/
│ │ ├── inbound/
│ │ ├── outbound/
│ └── persistence/
├── shared/
│ ├── enums/
│ ├── exceptions/
│ └── parsers/
├── db.migration/
│ ├── V1__create_tables.sql
│ ├── V2__create_accounts_tables.sql
└── application.properties
- Java 21
- Gradle 8.8
- Banco de dados PostgreSQL
- Docker (apenas para inicialização rápida)
- Docker Compose (apenas para inicialização rápida)
Subir o projeto com Docker:
git clone https://github.com/thoggs/accounts-payables-system-springboot.git && cd accounts-payables-system-springboot && docker compose up -d
O projeto estará disponível em http://localhost:8080/api/{endpoint}
- POST /auth/signin: autentica um usuário e retorna dados do usuário e um token de acesso.
- POST /auth/signup: registra um novo usuário e retorna dados do usuário e um token de acesso.
- POST /auth/github-signin: autentica um usuário com o GitHub e retorna dados do usuário e um token de acesso.
- POST /auth/signup:
{
"firstName": "YOUR_FIRST_NAME",
"lastName": "YOUR_LAST_NAME",
"email": "YOUR_EMAIL",
"password": "YOUR_PASSWORD",
"role": "user"
}
Roles disponíveis: user
, admin
, manager
, guest
.
- POST /auth/signin:
{
"email": "YOUR_EMAIL",
"password": "YOUR_PASSWORD"
}
- POST /auth/github-signin:
{
"githubToken": "YOUR_GITHUB_TOKEN"
}
-
GET /api/users: retorna uma lista paginada de todos os usuarios registrados. É possível personalizar a página e a quantidade de resultados exibidos na lista adicionando os seguintes parâmetros à URL:
-
page: número da página a ser exibida.
- Exemplo:
http://localhost:8080/api/users?page=2
exibe a segunda página de resultados.
- Exemplo:
-
pageSize: quantidade de resultados exibidos por página.
- Exemplo:
http://localhost:8080/api/users?perPage=5&page=3
exibe a terceira página com até 5 usuários por página.
- Exemplo:
-
searchTerm: termo de pesquisa para filtrar resultados.
- Será executado
LIKE
no banco de dados pelo termo informado. - Exemplo:
http://localhost:8080/api/users?searchTerm=John
filtra resultados contendo "John".
- Será executado
-
sorting: ordena os resultados por uma coluna específica.
- Exemplo:
http://localhost:8080/api/users?sorting=sorting=[{"id":"firstName","desc":false}]
- Exemplo:
-
-
GET /api/users/{id}: retorna informações detalhadas sobre um usuário específico.
-
POST /api/users: cria um novo registro de usuário.
-
PUT /api/users/{id}: atualiza as informações de um usuário existente.
-
DELETE /api/users/{id}: exclui um registro de usuário existente.
-
GET /api/accounts: retorna uma lista paginada de todas as contas registradas. É possível personalizar a página e a quantidade de resultados exibidos na lista adicionando os seguintes parâmetros à URL:
-
page: número da página a ser exibida.
- Exemplo:
http://localhost:8080/api/accounts?page=2
exibe a segunda página de resultados.
- Exemplo:
-
pageSize: quantidade de resultados exibidos por página.
- Exemplo:
http://localhost:8080/api/accounts?page=2&pageSize=10
exibe a segunda página com até 10 contas.
- Exemplo:
-
searchTerm: termo de pesquisa para filtrar resultados.
- Será executado
LIKE
no banco de dados pelo termo informado. - Exemplo:
http://localhost:8080/api/accounts?searchTerm=Payment
filtra resultados contendo "Payment".
- Será executado
-
sorting: ordena os resultados por uma coluna específica.
- Exemplo:
http://localhost:8080/api/accounts?sorting=[{"id":"dueDate","desc":true}]
- Exemplo:
-
startDate: data inicial para filtrar contas com vencimento após esta data.
- Exemplo:
http://localhost:8080/api/accounts?startDate=2025-01-01
filtra resultados após o dia 1º de janeiro de 2025.
- Exemplo:
-
endDate: data final para filtrar contas com vencimento antes desta data.
- Exemplo:
http://localhost:8080/api/accounts?endDate=2025-12-31
filtra resultados até o dia 31 de dezembro de 2025.
- Exemplo:
-
-
GET /api/accounts/{id}: retorna informações detalhadas sobre uma conta específica.
-
POST /api/accounts: cria um novo registro de conta.
-
PUT /api/accounts/{id}: atualiza as informações de uma conta existente.
-
DELETE /api/accounts/{id}: exclui um registro de conta existente.
-
PATCH /api/accounts/{id}/status: atualiza o status de uma conta existente.
-
GET /api/accounts/total-paid: calcula o total pago dentro de um período especificado.
-
POST /api/accounts/import: importa registros de contas a partir de um arquivo CSV.
Para importar registros de contas através do endpoint /api/accounts/import
, o arquivo CSV deve seguir o seguinte formato:
2025-01-09,2025-01-14,500.75,Payment for January utilities,PAID
2025-02-10,2025-02-15,300.50,Payment for February rent,PENDING
2025-03-11,,200.00,Payment for March services,UNPAID
- GET /health/check: retorna o status da aplicação.
{
"data": [
{
"id": "73002090-73b7-4461-b7d6-b66fc64c7096",
"dueDate": "2025-01-09",
"paymentDate": "2025-01-14",
"amount": 500.75,
"description": "Payment for January utilities",
"status": "PAID"
}
],
"success": true,
"metadata": {
"pagination": {
"currentPage": 1,
"itemsPerPage": 10,
"totalItems": 101,
"totalPages": 11
},
"messages": [
{
"errorCode": "INFO",
"errorMessage": "Operation completed successfully.",
"field": null
}
]
}
}
{
"data": [],
"success": false,
"metadata": {
"messages": [
{
"errorCode": "RESOURCE_NOT_FOUND",
"errorMessage": "Resource not found in the database",
"field": null
}
]
}
}
git clone https://github.com/thoggs/accounts-payables-system-springboot.git && cd accounts-payables-system-springboot
./gradlew build
Crie ou edite o arquivo .env
na raiz do projeto e adicione suas configurações do banco de dados:
JWT_SECRET=mysecretkey
JWT_EXPIRATION_TIME=86400000
GITHUB_API_URL=api.github.com
GITHUB_USER_PATH=/user
GITHUB_SCHEME=https
./gradlew bootRun
./gradlew build && java -jar build/libs/accounts-payables-system-springboot-0.0.1-SNAPSHOT.jar
- Spring Boot: Framework para criação de aplicações Java
- Hibernate JPA: ORM para mapeamento objeto-relacional
- PostgreSQL: Banco de dados relacional
- Spring Security: Framework para segurança e autenticação
- Spring Web: Framework para desenvolvimento web e APIs REST
- Spring Data JPA: Abstração para simplificar o acesso a dados com JPA
- Spring Batch: Framework para processamento em lote
- java-jwt: Biblioteca para geração e validação de tokens JWT
- Spring Boot Starter Test: Dependência para testes unitários e de integração
- Docker: Plataforma de contêineres
- Gradle: Ferramenta de automação de build e gerenciamento de dependências
Project license Apache-2.0