API REST para gerenciamento de clientes ("costumers"), construída com Java + Spring Data e persistência em AWS DynamoDB. Projeto de estudo focado em boas práticas de back-end: testes automatizados, mutation testing, containerização e integração com serviços AWS.
Este projeto implementa uma API REST de clientes utilizando o ecossistema Spring (Spring Boot + Spring Data) integrado ao Amazon DynamoDB como banco de dados NoSQL. O objetivo é servir como estudo prático de:
- Modelagem de dados não-relacional (NoSQL) com DynamoDB;
- Construção de APIs REST seguindo boas práticas;
- Qualidade de código através de testes unitários (JUnit 5) e mutation testing (Pitest/Stryker);
- Containerização com Docker para simular o ambiente local do DynamoDB.
sequenceDiagram
autonumber
participant C as Cliente<br/>(Insomnia/Postman)
participant CT as Controller
participant S as Service
participant R as Repository
participant DB as DynamoDB<br/>(Docker/Local/AWS)
C->>CT: HTTP Request (JSON)
CT->>S: Processa requisição
S->>R: Executa operação
R->>DB: AWS SDK
DB-->>R: Retorna dados
R-->>S: Resultado
S-->>CT: Resposta
CT-->>C: HTTP Response (JSON)
Tabela customers, com id como chave primária (partition key):
{
"TableName": "customers",
"AttributeDefinitions": [
{
"AttributeName": "id",
"AttributeType": "S"
},
{
"AttributeName": "company_name",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "id",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"GlobalSecondaryIndexes": [
{
"IndexName": "xCompanyName",
"KeySchema": [
{
"AttributeName": "company_name",
"KeyType": "HASH"
}
],
"Projection": {
"ProjectionType": "ALL"
},
"ProvisionedThroughput": {
"ReadCapacityUnits": 1,
"WriteCapacityUnits": 1
}
}
]
}- Java 17+
- Maven
- Docker (para rodar o DynamoDB local)
# 1. Clone o repositório
git clone https://github.com/flaviohnm/dynamodb.git
cd dynamodb
# 2. Suba o DynamoDB local via Docker
docker run -p 8000:8000 amazon/dynamodb-local
# 3. Compile e rode os testes
mvn clean install
# 4. Inicie a aplicação
mvn spring-boot:runA API ficará disponível em http://localhost:8080.
| Método | Rota | Descrição |
|---|---|---|
POST |
/customers |
Cria um novo cliente |
GET |
/customers |
Lista todos os clientes |
GET |
/customers/{id} |
Busca um cliente por ID |
PUT |
/customers/{id} |
Atualiza um cliente existente |
DELETE |
/customers/{id} |
Remove um cliente |
💡 Ajuste esta tabela conforme os endpoints reais implementados no seu
Controller.
O projeto utiliza JUnit 5 para testes unitários/integração e Pitest para mutation testing, garantindo que os testes realmente validem o comportamento do código (e não apenas a cobertura de linhas).
# Rodar testes unitários
mvn test
# Rodar mutation testing
mvn test-compile org.pitest:pitest-maven:mutationCoverageOs resultados de cobertura (Jacoco) e mutação (Stryker Dashboard) são exibidos nos badges no topo deste README.
- Publicar a aplicação com GitHub Actions (CI/CD)
- Adicionar documentação da API com Swagger/OpenAPI
- Deploy em ambiente AWS real (Lambda + API Gateway ou ECS)
Este projeto foi baseado no documento publicado por Kaike Ventura.
Feito por Flavio Monteiro 👋