Skip to content

trsthales/springboot-hexagonal-angular

Repository files navigation

Sistema de Biblioteca - Microserviços

Sistema completo de gerenciamento de biblioteca desenvolvido com arquitetura de microserviços usando Java 17, Spring Boot 3.3.1, Spring Security 6 e Angular 15.

🏗️ Arquitetura

Backend (Microserviços)

  • Gateway Service (porta 8080) - API Gateway e Eureka Server
  • Categoria Service (porta 8081) - Gerenciamento de categorias
  • Livro Service (porta 8082) - Gerenciamento de livros
  • Usuario Service (porta 8083) - Autenticação e gerenciamento de usuários
  • Emprestimo Service (porta 8084) - Gerenciamento de empréstimos

Tecnologias Backend

  • Java 17
  • Spring Boot 3.3.1
  • Spring Security 6 (mais atual)
  • Spring Cloud 2023.0.2
  • Maven para gerenciamento de dependências
  • H2 Database (em memória)
  • JWT para autenticação
  • Spring Cloud Gateway para roteamento
  • Netflix Eureka para descoberta de serviços
  • OpenFeign para comunicação entre microserviços
  • MapStruct para mapeamento de DTOs
  • Lombok para redução de boilerplate
  • Micrometer + Prometheus para métricas
  • SpringDoc OpenAPI para documentação
  • JUnit 5 para testes

Frontend

  • Angular 15
  • PrimeNG para componentes UI
  • Arquitetura Hexagonal

Princípios Aplicados

  • Arquitetura Hexagonal (Ports and Adapters)
  • Domain-Driven Design (DDD)
  • SOLID Principles
  • Clean Code
  • Microservices Pattern

🚀 Como Executar

Pré-requisitos

  • Java 17+
  • Maven 3.6+
  • Node.js 16+ e npm (para o frontend)

Executar Backend

Opção 1: Script Automático

Linux/Mac:

chmod +x start-services.sh
./start-services.sh

Windows:

start-services.bat

Opção 2: Manual

  1. Compilar o projeto:
mvn clean install -DskipTests
  1. Iniciar serviços na ordem:
# 1. Gateway Service (Eureka Server)
cd gateway-service
mvn spring-boot:run
# 2. Categoria Service
cd categoria-service
mvn spring-boot:run
# 3. Livro Service
cd livro-service
mvn spring-boot:run
# 4. Usuario Service
cd usuario-service
mvn spring-boot:run
# 5. Emprestimo Service
cd emprestimo-service
mvn spring-boot:run

Executar Frontend (Angular)

cd frontend-angular
npm install
npm start

O frontend estará disponível em: http://localhost:4200

📚 Funcionalidades

1. Gerenciamento de Categorias

  • CRUD completo de categorias
  • Validação de regras de negócio
  • Dados iniciais pré-carregados (15 categorias)

2. Gerenciamento de Livros

  • CRUD completo de livros
  • Associação obrigatória com categorias
  • Controle de disponibilidade
  • Busca por título e autor
  • Dados iniciais pré-carregados (10 livros)

3. Gerenciamento de Usuários

  • Cadastro e autenticação de usuários
  • Diferentes papéis (ADMIN, USER)
  • Sistema de bloqueio/desbloqueio
  • JWT com Spring Security 6 para autenticação
  • Usuários padrão criados

4. Sistema de Empréstimos

  • Empréstimo de livros por usuários autenticados
  • Período máximo de 10 dias
  • Sistema de devolução
  • Controle de atrasos com penalidades
  • Bloqueio automático de usuários inadimplentes
  • Verificação automática de empréstimos vencidos (scheduler)

🔐 Autenticação

Usuários Padrão

  • Administrador:

    • Email: admin@livraria.com
    • Senha: admin123
  • Usuário Comum:

    • Email: joao.silva@email.com
    • Senha: 123456

📊 Monitoramento

URLs de Acesso

Documentação da API (Swagger)

🗄️ Banco de Dados

Configuração H2

  • URL: jdbc:h2:mem:livraria
  • Usuário: livraria
  • Senha: livraria

Dados Iniciais

O sistema carrega automaticamente:

  • 15 categorias de livros
  • 10 livros de exemplo
  • 4 usuários (1 admin + 3 usuários comuns)

🧪 Testes

# Executar todos os testes
mvn test

# Executar testes de um serviço específico
cd categoria-service
mvn test

📝 Regras de Negócio

  1. Livros devem ter pelo menos uma categoria
  2. Apenas usuários autenticados podem fazer empréstimos
  3. Período máximo de empréstimo: 10 dias
  4. Devolução em atraso resulta em bloqueio do usuário
  5. Usuários bloqueados não podem fazer novos empréstimos
  6. Livros emprestados ficam indisponíveis para outros usuários
  7. Verificação automática de empréstimos vencidos (a cada hora)

🛠️ Desenvolvimento

Estrutura de Módulos

livraria-microservices/
├── pom.xml (parent)
├── commons-module/
├── gateway-service/
├── categoria-service/
├── livro-service/
├── usuario-service/
├── emprestimo-service/
└── frontend-angular/

Padrões de Código

  • Arquitetura Hexagonal em todos os serviços
  • Separação clara entre Domain, Application e Infrastructure
  • DTOs para transferência de dados
  • Mappers para conversão entre entidades e DTOs
  • Exception handling global
  • Logging estruturado
  • Spring Security 6 com JWT
  • Validações com Bean Validation

⚡ Novidades desta Versão

  • Spring Security 6 (versão mais atual)
  • Configuração moderna de segurança com SecurityFilterChain
  • JWT aprimorado com algoritmos seguros
  • Verificação automática de empréstimos vencidos
  • Frontend Angular 15 com PrimeNG
  • Arquitetura Hexagonal no frontend
  • Interceptor HTTP para autenticação automática
  • Guards de rota para proteção de páginas

📄 Licença

Este projeto é desenvolvido para fins educacionais e demonstração de arquitetura de microserviços com as tecnologias mais atuais.


Desenvolvido com ❤️ usando Spring Boot 3.3.1, Spring Security 6, Angular 15 e PrimeNG

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published