Skip to content

Repository files navigation

🛒 API REST Costumer | AWS DynamoDB & Java Spring Data

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.

Coverage Mutation Testing Badge Java Spring DynamoDB Docker


📑 Sumário


📖 Sobre o Projeto

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.

🏗 Arquitetura

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)
Loading

🚀💻 Tecnologias & Ferramentas

Linguagens & Frameworks

Java Spring ApacheMaven

Ferramentas

Docker DynamoDB JUnit5 IntelliJ Insomnia

💻 Modelagem no DynamoDB

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
      }
    }
  ]
}

▶️ Como Executar

Pré-requisitos

  • Java 17+
  • Maven
  • Docker (para rodar o DynamoDB local)

Passo a passo

# 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:run

A API ficará disponível em http://localhost:8080.

📡 Endpoints da API

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.

🧪 Testes

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:mutationCoverage

Os resultados de cobertura (Jacoco) e mutação (Stryker Dashboard) são exibidos nos badges no topo deste README.

🗺 Roadmap

  • 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)

✍️ Comentários sobre o projeto

Este projeto foi baseado no documento publicado por Kaike Ventura. LinkedIn


👨‍🚀 Autor

Feito por Flavio Monteiro 👋

About

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.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages