VicenteDev
API Royal Enfield

API REST Royal Enfield

API REST desenvolvida em Java 21 e Spring Boot para o ecossistema digital da marca Royal Enfield. O projeto provê gerenciamento completo de catálogo de motocicletas, versões/variantes de acabamento, galeria de imagens para carrossel, especificações técnicas detalhadas, rede de concessionárias, agendamentos de test ride e controle de acesso com perfis de usuários.

A documentação detalhada dos endpoints, estruturas de requisição, exemplos com cURL e formatos de resposta está disponível no meu GitHub em Contrato da API.


Tecnologias e Ferramentas

  • Linguagem: Java 21 (LTS)
  • Framework: Spring Boot 4
  • Persistência de Dados: Spring Data JPA / Hibernate
  • Banco de Dados: PostgreSQL 16
  • Versionamento de Banco de Dados: Flyway Migration
  • Segurança: Spring Security
  • Validação: Jakarta Bean Validation
  • Produtividade: Lombok
  • Containerização: Docker e Docker Compose
  • CI/CD: GitHub Actions
  • Infraestrutura / Deploy: Oracle Cloud Infrastructure (OCI - Compute Instance)
  • Formato de Erros: RFC 7807 (ProblemDetail)

Arquitetura e Estrutura de Pastas

O projeto adota uma Arquitetura em Camadas (Layered Architecture) estrita com separação de responsabilidades e princípios Clean Code e SOLID:

src/main/java/com/vicentedev/api_re
├── config/              # Configuracoes (Seguranca, MVC ResourceHandlers)
├── controller/          # Controladores REST da aplicacao
├── dto/                 # Objetos de Transferencia de Dados
│   ├── request/         # Payloads de entrada com validacao
│   └── response/        # Respostas imutaveis
├── entity/              # Entidades JPA mapeadas para PostgreSQL
├── exception/           # Tratamento global de excecoes (@RestControllerAdvice)
├── mapper/              # Mapeadores desacoplados entre DTOs e Entidades
├── repository/          # Interfaces Spring Data JPA e Specifications
│   └── specification/   # Filtros dinamicos de consulta
└── service/             # Interfaces e regras de negocio
    └── impl/            # Implementacoes dos servicos e armazenamento local


Deploy e Integração Contínua (CI/CD)

O ciclo de vida de entrega contínua do projeto é totalmente automatizado:

  • Pipelines de CI/CD: Implementadas via GitHub Actions, executando a compilação, validações estáticas e suíte de testes automatizados a cada push ou pull request.
  • Infraestrutura em Produção: A aplicação e os serviços correlacionados estão hospedados em uma instância de computação na Oracle Cloud (OCI), executados de forma isolada via contêineres Docker para garantir consistência e estabilidade no ambiente de produção.

Armazenamento de Arquivos e Mídia

A aplicação possui um serviço desacoplado (FileStorageService) para armazenamento de imagens fisicamente no disco local:

  • Diretório base: ./uploads/ (com subpastas /variants/ e /gallery/).
  • Formatos suportados: .jpg, .jpeg, .png, .webp.
  • Acesso público: A rota /uploads/** é servida diretamente pelo Spring Web MVC.
  • Ciclo de vida e exclusão: Ao excluir uma variante, foto de galeria ou motocicleta, os arquivos correspondentes são automaticamente removidos do disco.

Como Executar o Projeto

Pré-requisitos

  • Java Development Kit (JDK) 21 instalado
  • Docker e Docker Compose instalados

1. Clonar o Repositório

git clone git@github.com:VicenteAlef/api-royal-enfield-spring-boot.git
cd api-royal-enfield-spring-boot
git checkout dev

2. Iniciar o Banco de Dados PostgreSQL

Suba a instância local do PostgreSQL via Docker Compose:

docker compose up -d

3. Executar os Testes Automatizados

Valide a integridade do banco de dados, migrações Flyway e endpoints REST:

./mvnw test

4. Executar a Aplicação

Inicie o servidor de desenvolvimento:

./mvnw spring-boot:run

A API estará disponível em http://localhost:8080/api/v1.


Estratégia de Branching (Git Flow)

  • main: Código de produção e versões estáveis consolidadas (gatilho de deploy em produção via CI/CD).
  • dev: Branch de desenvolvimento ativo e integração contínua de features.

Roadmap de Desenvolvimento

  • Fase 1 (Planejamento & Setup): Modelagem relacional, Docker Compose, configuração do PostgreSQL e migração inicial com Flyway. [Concluída]
  • Fase 2 (Catálogo, Variantes, Galeria, Ficha Técnica e Uploads): Entidades JPA, DTOs, Mappers, Reposositórios com Specification, FileStorageService, controladores REST e testes de integração. [Concluída]
  • Fase 3 (Concessionárias e Test Rides): CRUD de Concessionárias e fluxo de agendamento de Test Rides com validação de regras de negócio. [Concluída]
  • Fase 4 (Segurança e Autenticação): Autenticação com JWT, controle de perfis (USER/ADMIN) e proteção de rotas. [Próxima Etapa]
  • Fase 5 (Documentação e Containerização): Documentação interativa via OpenAPI 3 / Swagger e Dockerfile multi-stage. [Pendente]