Skip to content

Davi0416/solvo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

104 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Solvo - API de Pagamentos Simplificada

Java Spring Boot PostgreSQL Kafka Redis

API de pagamentos entre usuarios, com contas de consumidor e lojista, autenticacao JWT, cache Redis e notificacoes assincronas por Kafka.

Funcionalidades

  • Cadastro de usuarios consumidores e lojistas.
  • Autenticacao por email e senha, com emissao de JWT.
  • Carteiras com saldo para cada usuario.
  • Transferencias com validacao de saldo e bloqueio de envio por lojistas.
  • Autorizacao externa antes de concluir uma transferencia.
  • Idempotencia de transferencias por Redis.
  • Notificacao assincrona de transferencias concluidas por Kafka.
  • Documentacao OpenAPI via Swagger UI.

Stack

Categoria Tecnologia
Linguagem e framework Java 25, Spring Boot 4.1
Persistencia PostgreSQL, Spring Data JPA, Flyway
Cache Redis
Mensageria Apache Kafka
Seguranca Spring Security, JWT, BCrypt
Documentacao springdoc-openapi
Testes JUnit 5, Mockito, Testcontainers

Executando localmente

Requisitos: Docker Desktop, JDK 25 e Maven ou Maven Wrapper.

  1. Crie um arquivo .env na raiz do projeto:
POSTGRES_USER=solvo
POSTGRES_PASSWORD=solvo
JWT_SECRET=uma-chave-secreta-com-pelo-menos-32-caracteres
  1. Inicie a infraestrutura:
docker compose up -d
  1. Execute a aplicacao:
./mvnw spring-boot:run

No Windows, use ./mvnw.cmd spring-boot:run.

A API fica disponivel em http://localhost:8080. O Swagger UI fica em http://localhost:8080/swagger-ui/index.html.

Autenticacao

Somente o cadastro de usuario e o login sao publicos. Para os demais endpoints, envie:

Authorization: Bearer <token>

Cadastro

POST /api/v1/users

{
  "name": "Davi",
  "document": "12345678900",
  "userType": "CONSUMER",
  "email": "davi@example.com",
  "password": "senha123",
  "phone": "11999999999"
}

userType aceita CONSUMER e MERCHANT.

Login

POST /api/v1/auth/login

{
  "email": "davi@example.com",
  "password": "senha123"
}

Resposta:

{
  "token": "<jwt>"
}

Endpoints

Metodo Endpoint Autenticacao Descricao
POST /api/v1/users Nao Cria um usuario
POST /api/v1/auth/login Nao Retorna um JWT
GET /api/v1/users/{id} Sim Retorna o proprio usuario
POST /api/v1/wallets Sim Cria uma carteira para o usuario autenticado
GET /api/v1/wallets/{id} Sim Retorna a propria carteira
POST /api/v1/transfers Sim Cria uma transferencia
GET /api/v1/transfers/{id} Sim Consulta uma transferencia da qual o usuario participa

Criar carteira

POST /api/v1/wallets

{
  "userType": "CONSUMER"
}

O userId e definido a partir do token; nao e necessario envia-lo no corpo.

Criar transferencia

POST /api/v1/transfers

{
  "senderWalletId": "00000000-0000-0000-0000-000000000001",
  "receiverWalletId": "00000000-0000-0000-0000-000000000002",
  "transferValue": 100.00
}

O remetente da carteira deve ser o usuario autenticado. Para evitar transferencias duplicadas em repeticoes da mesma requisicao, envie opcionalmente o cabecalho:

Idempotency-Key: 4d2b132e-4f25-4a01-b2be-9b5d8c752f8b

Infraestrutura

O docker compose inicia:

  • PostgreSQL em localhost:5431.
  • Redis em localhost:6379.
  • Kafka em localhost:9092.

Se forem exibidos avisos de reconexao do Kafka, confirme que o servico esta em execucao:

docker compose ps
docker compose up -d kafka

Testes

./mvnw test

Os testes de integracao usam Testcontainers e exigem que o Docker esteja em execucao.

About

Payment API with JWT authentication, wallets, transfers, Redis idempotency, Kafka notifications and integration tests.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages