Este projeto é uma API RESTful desenvolvida em Java com Spring Boot para gerenciamento de usuários, ativos (assets) e carteiras (wallets), incluindo funcionalidades de autenticação JWT e operações de adicionar, atualizar e remover ativos de carteiras.
Nomes + RM dos integrantes:
- Fabrício Saavedra - 97631
- Guilherme Akio - 98582
- Guilherme Morais - 551981
- Lorenzo Ferreira - 97318
- Açussena Macedo Mautone - 552568
Turma: 3ESPW
Ano: 2025
- Java 21
- Spring Boot
- Spring Data JPA
- Hibernate
- H2 Database (para desenvolvimento/testes)
- Spring Security com JWT
- BCrypt Password Encoder
- Maven
- JDK 21 instalado
- Maven instalado
- IDE de sua preferência (IntelliJ, Eclipse, VS Code)
- Clone o repositório:
git clone https://github.com/Guimeb/Java-API
- Ajuste as propriedades de
src/main/resources/application.properties
ouapplication.yml
:spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=galo spring.datasource.password= # JWT jwt.public-key-location=classpath:app.pub jwt.private-key-location=classpath:app.key
mvn clean spring-boot:run
Acesse http://localhost:8080/swagger-ui/index.html#/
para a documentação interativa.
Conta para autenticação
Usuario: galo
Senha: password
- POST
/authenticate
- Descrição: Autentica usuário e retorna token JWT.
- Request Body:
{ "username": "galo", "password": "password" }
- Response:
{ "token": "eyJhbGciOiJI...", "type": "Bearer" }
-
POST
/users
- Descrição: Cria um novo usuário e uma carteira associada.
- Body:
{ "username": "alice", "email": "alice@example.com", "password": "SenhaForte123!" }
- Response: Objeto
User
comid
,username
,email
(senha não retornada).
-
GET
/users
- Descrição: Lista todos os usuários.
- Response: Array de usuários (sem senha).
-
GET
/users/{id}
- Descrição: Busca usuário por ID.
-
PUT
/users
- Descrição: Atualiza dados do usuário (re-hash da senha).
- Body:
{ "id": 1, "username": "alice2", "email": "alice2@example.com", "password": "NovaSenha!" }
-
DELETE
/users/{id}
- Descrição: Remove usuário.
-
POST
/assets
- Descrição: Cria ativo.
- Body:
{ "symbol": "BTC", "name": "Bitcoin", "currentValue": 60000.00 }
-
GET
/assets
- Descrição: Lista todos ativos.
-
GET
/assets/{id}
- Descrição: Busca ativo por ID.
-
PUT
/assets
- Descrição: Atualiza ativo.
-
DELETE
/assets/{id}
- Descrição: Remove ativo.
- GET
/wallets/{walletId}
- Descrição: Busca carteira pelo ID (contém lista de ativos na carteira).
-
POST
/wallets/{userId}/assets
- Descrição: Adiciona ativo à carteira.
- Body:
{ "assetId": 1, "quantity": 0.5, "purchasePrice": 30000.00 }
-
GET
/wallets/{walletId}/assets
- Descrição: Lista ativos em uma carteira.
-
PUT
/wallets/{walletId}/assets/{walletAssetId}
- Descrição: Atualiza quantidade ou preço de um ativo na carteira.
- Body:
{ "quantity": 0.75, "purchasePrice": 32000.00 }
-
DELETE
/wallets/{walletId}/assets/{walletAssetId}
- Descrição: Remove ativo da carteira.
- GET
/private
- Descrição: Exemplo de rota protegida que retorna "Hello from private API controller".
- Autorização: Bearer Token no header
Authorization: Bearer <token>
.
- Erros de validação retornam HTTP 400 com detalhes de campos.
- Recursos não encontrados retornam HTTP 404.
- Operações bem-sucedidas retornam HTTP 200 ou 201.
- As senhas são hash com BCrypt e salt único por usuário.
- Fator de custo padrão: 10 (configurável em
BCryptPasswordEncoder(strength)
). - Tokens JWT assinados com chaves RSA.
- Rota
/auth/login
é pública; demais endpoints REST requerem autenticação JWT.
classDiagram
User "1" -- "1" Wallet : owns
Wallet "1" o-- "*" WalletAsset : contains
Asset "1" o-- "*" WalletAsset : referenced by
User : +Long id
User : +String username
User : +String email
User : +String password
Wallet : +Long id
Wallet : +User user
WalletAsset : +Long id
WalletAsset : +BigDecimal quantity
WalletAsset : +BigDecimal purchasePrice
WalletAsset : +LocalDateTime purchaseDate
Asset : +Long id
Asset : +String symbol
Asset : +String name
Asset : +BigDecimal currentValue
flowchart TD
%% --------- CLIENT ----------
U[User] --> Client[REST Client]
%% --------- API ENTRY ----------
Client --> API["Spring Boot API"]
%% --------- SECURITY ----------
API --> JWTSec[JWT Security Filter]
%% --------- CONTROLLERS ----------
JWTSec --> Controllers
subgraph Controllers
AuthC[AuthenticationController]
UserC[UserController]
AssetC[AssetController]
WalletC[WalletController]
WAController[WalletAssetController]
end
%% --------- SERVICES ----------
Controllers --> Services
subgraph Services
AuthS[AuthService]
UserS[UserService]
AssetS[AssetService]
WalletS[WalletService]
WASvc[WalletAssetService]
end
%% --------- REPOSITORIES ----------
Services --> Repos
subgraph Repos
UserRepo[UserRepository]
AssetRepo[AssetRepository]
WalletRepo[WalletRepository]
WalletAssetRepo[WalletAssetRepository]
end
%% --------- DATABASE ----------
Repos --> DB[(Database)]
%% --------- RESPONSE ----------
DB --> Response[Repository returns data]
Response --> Client