Skip to content

erichiroshi/library-api

Repository files navigation

📚 Library API

CI PDF Quality Gate Status codecov

Java Spring Boot 4 Spring Cloud Docker Redis Observability Resilience AWS S3

Backend production-ready para gerenciamento de biblioteca, evoluindo de monolito para arquitetura de microservices.


🗂 Estrutura do Repositório

Este repositório adota estrutura monorepo com Gradle multi-project.

library-api/
├── library-api/       # Monolito original (v1.3.1) — Spring Boot 4 + JWT + Redis + S3
├── config-server/     # Spring Cloud Config Server — configuração centralizada
├── eureka-server/     # Netflix Eureka — service discovery
├── gateway/           # Spring Cloud Gateway — entrada única + JWT centralizado
├── auth-service/      # Autenticação, usuários e refresh tokens
├── catalog-service/   # Livros, autores, categorias e upload S3
├── loan-service/      # Empréstimos com Feign + Circuit Breaker
└── config-repo/       # Repositório de configurações (YAML por serviço)

🏛 Fase 2 — Monolito (v1.3.1)

Monolito production-ready com bounded contexts bem definidos, preparado para extração em microservices.

📁 library-api/ 📖 Documentação completa do monolito

Stack:

  • Java 25 + Spring Boot 4.x
  • PostgreSQL 16 + Flyway (schemas isolados: auth, catalog, lending)
  • Redis 7 (cache distribuído)
  • JWT + Refresh Token Rotation
  • AWS S3 (upload de imagens com compressão automática)
  • Resilience4j (Circuit Breaker + Retry)
  • OpenTelemetry + Zipkin (tracing distribuído)
  • Prometheus + Grafana (observabilidade)
  • Testcontainers + JaCoCo (80%+ cobertura obrigatória)
  • SonarCloud + Codecov + GitHub Actions

🏛 Fase 3 — Microservices (v2.0.0)

Extração do monolito em microservices usando o padrão Strangler Fig.

Serviço Descrição Status
config-server/ Configuração centralizada ✅ Concluído
eureka-server/ Service discovery ✅ Concluído
gateway/ API Gateway + JWT ✅ Concluído
auth-service/ Autenticação ✅ Concluído
catalog-service/ Catálogo de livros ✅ Concluído
loan-service/ Empréstimos ✅ Concluído

Decisões arquiteturais:

  • Monorepo com Gradle multi-project
  • Spring Cloud Config (configuração centralizada)
  • Netflix Eureka (service discovery com path para Kubernetes)
  • Spring Cloud Gateway com JWT centralizado (downstream services confiam nos headers)
  • OpenFeign + Resilience4j (comunicação entre serviços com Circuit Breaker)
  • Um banco PostgreSQL com schemas isolados por serviço

Acompanhe o progresso no GitHub Projects


🔬 Fase 4 — Mensageria, Performance (em desenvolvimento)

Acompanhe o progresso no Fase 4 - Roadmap

Visão geral

Fase 4
├── Etapa 1 — RabbitMQ (mensageria)
├── Etapa 2 — Testes de carga (k6)
│   ├── Monolito sem otimização
│   ├── Monolito com cache Redis
│   ├── Microservices sem cache
│   └── Microservices com cache
└── Etapa 3 — Análise e documentação dos resultados

🚀 Quick Start

O projeto possui dois modos de execução:

  • dev → ambiente voltado para desenvolvimento e avaliação
  • prod → ambiente containerizado simulando produção

Clone o projeto

git clone https://github.com/erichiroshi/library-api.git
cd library-api

Refresh Gradle project em cada serviço → Executar a aplicação

./gradlew clean build

🟢 Modo Desenvolvimento (recomendado para avaliação)

Nesse modo a infraestrutura é executada via Docker e a aplicação pode ser iniciada via terminal ou IDE.

Microservices

Rodar via CLI - perfil dev

# 1. Infraestrutra + Observabilidade + Mensageria
# Docker Compose (Postgres + Redis + PgAdmin + Grafana + Prometheus + Zipkin + RabbitMQ)

cd library-api
docker compose -f docker-compose.dev.yml up -d

# 2. Config Server
cd config-server
./gradlew bootRun
# Acesse: http://localhost:8888/actuator/health

# 3. Eureka Server (requer Config Server rodando)
cd eureka-server
./gradlew bootRun --args='--spring.profiles.active=dev'
# Acesse: http://localhost:8761
# Acesse: http://localhost:8761/actuator/health

# 4. Gateway (requer Config Server e Eureka Server rodando)
cd gateway
./gradlew bootRun --args='--spring.profiles.active=dev'
# Acesse: http://localhost:8080/actuator/health

# 5. Auth Service (requer Config Server, Eureka e Postgres)
cd auth-service
./gradlew bootRun --args='--spring.profiles.active=dev'
# Acesse: http://localhost:{port-spring}/actuator/health

# 6. Catalog Service (requer Config Server, Eureka e Postgres)
cd catalog-service
./gradlew bootRun --args='--spring.profiles.active=dev'
# Acesse: http://localhost:{port-spring}/actuator/health

# 7. Loan Service (requer Config Server, Eureka e Postgres)
cd loan-service
./gradlew bootRun --args='--spring.profiles.active=dev'
# Acesse: http://localhost:{port-spring}/actuator/health

🏭 Modo Produção (simulado)

Docker Compose completo disponível.

docker compose up -d 
docker compose up  #ver os logs no terminal

Serviços disponíveis após o startup:

  • API Gateway: http://localhost:8080
  • Eureka Dashboard: http://localhost:8761
  • Config Server: http://localhost:8888
  • Prometheus: http://localhost:9090
  • Grafana: http://localhost:3000 (admin/admin)
  • Zipkin: http://localhost:9411
  • RabbitMQ: http://localhost:15672 (guest/guest)

Credenciais de teste:

  • ADMIN: joao.silva@email.com / 123456

Ordem de subida (automática via depends_on):

postgres + redis → config-server → eureka-server → gateway
→ auth-service + catalog-service → loan-service
→ prometheus + grafana + zipkin + RabbitMQ

🧯 Encerrar ambiente

docker compose down          # Para os containers
docker compose down -v       # Para e remove volumes (apaga banco)

📊 Métricas do Projeto

Monolito (v1.3.1)

  • ~8.000 linhas de código
  • 125+ testes (unit + integration)
  • 80%+ cobertura (JaCoCo)
  • 30+ endpoints REST versionados

Microservices (v2.0.0)

  • 6 serviços extraídos do monolito
  • 10+ containers orquestrados via Docker Compose
  • 1 ponto de entrada (Gateway com JWT centralizado)
  • 3 schemas isolados por domínio (auth, catalog, lending)
  • W3C Trace Context propagado em todos os serviços

Autor

Eric Hiroshi — Backend Engineer · Java / Spring Boot

LinkedIn

GitHub


📄 Licença

MIT

About

API REST completa para gerenciamento de biblioteca com Spring Boot e Java 25. Inclui autenticação JWT, cache Redis, observabilidade (Prometheus/Grafana), Docker Compose e CI/CD.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors