Para transformar o processo completo de construção da nossa aplicação em um guia didático eficaz para alunos, a melhor abordagem é dividir o conteúdo em módulos bem definidos, onde cada um representa um marco de aprendizado claro e constrói sobre o anterior.
Considerando a complexidade e a variedade de conceitos que abordamos (do banco de dados ao JWT e ao frontend), a separação ideal seria em 8 módulos.
Esta divisão permite que os alunos foquem em um conjunto coeso de habilidades por vez, desde a fundação do backend até a criação da interface do usuário e o deploy, facilitando a absorção e a prática.
Aqui está o detalhamento de como os 8 módulos podem ser organizados para maximizar o aprendizado.
Objetivo: Construir a base da aplicação. Ao final, o aluno terá uma aplicação que se conecta a um banco de dados e entende a estrutura dos dados, mas ainda sem lógica de negócio ou interface.
schema.sql e Diagrama ER).record no pacote model).Repository com Spring Data).Objetivo: Isolar as regras de negócio do resto do código, aplicando princípios de design de software (SOLID). O aluno aprenderá a criar o “cérebro” da aplicação.
ProdutoService e o Princípio da Inversão de Dependência - DIP).ProdutoServiceImpl).Objetivo: Expor a lógica de negócio para o mundo exterior através de endpoints HTTP. Ao final, o aluno terá uma API funcional, porém ainda insegura.
@RestController.ResponseEntity (Status codes: 200, 201, 404, etc.).Controllers para Produtos, Categorias e Fornecedores.Objetivo: Proteger a API. Este é um módulo denso e crucial que ensina o padrão de mercado para segurança em arquiteturas desacopladas.
JwtTokenProvider (Geração e validação dos tokens).JwtAuthenticationFilter).SecurityConfig para uma API Stateless.AuthenticationController).Objetivo: Transformar a API funcional em uma API profissional, fácil de usar e previsível.
springdoc-openapi).@Operation, @ApiResponse, etc.).ErrorResponseDTO).@RestControllerAdvice.Objetivo: Ensinar o aluno a validar a própria lógica e garantir que futuras alterações não quebrem o código existente.
ProdutoServiceImplTest).@WebMvcTest).Objetivo: Mostrar como o backend robusto que foi construído pode ser consumido por um cliente moderno. Este módulo foca nos conceitos, usando JavaScript puro (“vanilla”).
index.html, login.html).fetch e o módulo api.js).auth.js e localStorage para o JWT).router.js).Objetivo: Ensinar o aluno a empacotar a aplicação para distribuição e execução em qualquer ambiente.
Dockerfile para a aplicação Spring Boot.docker-compose.| Módulo | Título | Conceitos-Chave | Resultado Esperado | Próxima Etapa |
|---|---|---|---|---|
| 1 | Fundamentos e Persistência de Dados | Spring Initializr, JDBC, SQL, Entidades, Repositories | Uma aplicação com camada de dados funcional. | Lógica de Negócio |
| 2 | Lógica de Negócio e Arquitetura de Serviços | SOLID, Camada de Serviço, DTOs, Mappers | Lógica de negócio isolada e organizada. | Expor como API |
| 3 | Construindo a API REST | @RestController, ResponseEntity, Verbos HTTP |
Endpoints de CRUD funcionais, mas inseguros. | Segurança |
| 4 | Segurança de APIs com Spring Security e JWT | Stateless, JWT, Filtros de Segurança, UserDetailsService |
API com autenticação e autorização robustas. | Profissionalização |
| 5 | Profissionalizando a API: Documentação e Erros | OpenAPI/Swagger, @ControllerAdvice, DTOs de Erro |
API auto-documentada e com tratamento de erros padronizado. | Testes |
| 6 | Garantia de Qualidade com Testes | Testes Unitários/Integração, JUnit 5, Mockito | Lógica de negócio validada por uma suíte de testes. | Interface do Usuário |
| 7 | Introdução ao Frontend SPA | SPA, fetch, localStorage, Roteamento no Cliente |
Um protótipo de frontend que consome a API. | Deploy |
| 8 | Deployment e Containerização com Docker | Containers, Dockerfile, docker-compose |
Aplicação empacotada e pronta para ser executada em qualquer lugar. | Fim do Curso |
Esta estrutura de 8 módulos garante uma progressão lógica, abordando teoria e prática em doses equilibradas, o que é ideal para um ambiente de sala de aula.