π¬ FΓ³rumHub β API REST com Spring Boot 3, MySQL e JWT
(Alura - Challenge)
FΓ³rumHub Γ© uma API REST completa, segura e totalmente automatizada para um sistema de fΓ³rum online, com autenticaΓ§Γ£o via JWT, validaΓ§Γ£o robusta e arquitetura profissional com Spring Boot. Desenvolvido como parte do Challenge da formaΓ§Γ£o Back-End Java OOP da Alura. O projeto adota arquitetura em camadas (controller, service, repository, domain e DTOs), aplicando boas prΓ‘ticas de organizaΓ§Γ£o, responsabilidade e manutenΓ§Γ£o de cΓ³digo.
O desenvolvimento do projeto consolidou habilidades como:
- βοΈ Arquitetura RESTful
- π οΈ Testes unitΓ‘rios e de integraΓ§Γ£o com JUnit e Mockito
- β ValidaΓ§Γ΅es robustas com Bean Validation
- π¨ Tratamento de erros
- π DocumentaΓ§Γ£o automatizada com Swagger (OpenAPI)
- π SeguranΓ§a com JWT (JSON Web Token)
- β Java 17 ou superior + π± Spring Boot 3
- π Spring Security + π§Ύ JWT
- π¦ JPA + π Hibernate
- π¬ Banco de dados MySQL
- π οΈ Controle de versionamento de banco com Flyway
- π¦ Maven: Gerenciamento de dependΓͺncias e build.
- π¦ JUnit 5
- π§ Mockito
- π Swagger (OpenAPI)
- π» IntelliJ IDE: Ambiente de desenvolvimento integrado.
- πΎ MySQL: Sistema de gerenciamento de banco de dados relacional de cΓ³digo aberto.
- π‘ Insomnia: Ferramenta de teste de APIs REST que permite enviar requisiΓ§Γ΅es HTTP, validar respostas e testar endpoints com facilidade.
O projeto utiliza o Flyway para gerenciar as migrations de banco de dados no MySQL. Todas as alteraΓ§Γ΅es de estrutura no banco (como criaΓ§Γ£o de tabelas e alteraΓ§Γ΅es de schema) sΓ£o versionadas e controladas, garantindo consistΓͺncia entre os ambientes de desenvolvimento e produΓ§Γ£o.
O FΓ³rumHub Γ© um back-end de fΓ³rum desenvolvido com Spring Boot, com foco em boas prΓ‘ticas e organizaΓ§Γ£o de API REST.
- Cadastro e login de usuΓ‘rios
- AutenticaΓ§Γ£o via JWT
- Controle de acesso baseado em perfis de usuΓ‘rio
- Cursos
- Cadastro de cursos
- Listagem de cursos
- Categorias
- OrganizaΓ§Γ£o dos tΓ³picos por categorias
- TΓ³picos de DiscussΓ£o
- Criar novos tΓ³picos
- Listar tΓ³picos (com paginaΓ§Γ£o e filtros)
- Atualizar e excluir tΓ³picos
- Controle de status dos tΓ³picos
- Marcar uma resposta como soluΓ§Γ£o
- Respostas aos TΓ³picos
- Adicionar respostas aos tΓ³picos
- Listar respostas (com paginaΓ§Γ£o e filtros)
- Atualizar e excluir respostas
- ValidaΓ§Γ£o de dados de entrada (DTOs com Bean Validation)
- Mensagens de erro claras e padronizadas
- Tratamento centralizado de exceΓ§Γ΅es
- API documentada com Swagger UI
Para ver a interface Swagger em aΓ§Γ£o, acesse as demonstraΓ§Γ΅es visuais com GIFs interativos mostrando os principais endpoints da API.
O projeto conta com uma cobertura significativa de testes unitΓ‘rios e de integraΓ§Γ£o, garantindo a qualidade e o correto funcionamento dos fluxos principais de negΓ³cio da API, incluindo:
- Cadastro de usuΓ‘rios, perfis, cursos, tΓ³picos e respostas.
- AutenticaΓ§Γ£o com JWT.
- ValidaΓ§Γ΅es de regras de negΓ³cio.
- Tratamento global de exceΓ§Γ΅es.
Os testes foram desenvolvidos com:
- π¦ JUnit 5
- π§ Mockito
- π― Spring Boot Test
βββ hub.forum.api
β βββ controller
β β βββ AutenticacaoController.java
β β βββ CursoController.java
β β βββ PerfilController.java
β β βββ RespostaController.java
β β βββ TopicoController.java
β β βββ UsuarioController.java
β βββ domain
β β βββ categoria
β β β βββ Categoria.java
β β βββ curso
β β β βββ Curso.java
β β βββ perfil
β β β βββ Perfil.java
β β βββ resposta
β β β βββ Resposta.java
β β βββ topico
β β β βββ StatusTopico.java
β β β βββ Topico.java
β β βββ usuario
β β βββ Usuario.java
β βββ dto
β β βββ curso
β β β βββ DadosCadastroCurso.java
β β β βββ DadosDetalhamentoCurso.java
β β β βββ DadosListagemCurso.java
β β βββ perfil
β β β βββ DadosCadastroPerfil.java
β β β βββ DadosDetalhamentoPerfil.java
β β β βββ DadosListagemPerfil.java
β β βββ resposta
β β β βββ DadosAtualizacaoResposta.java
β β β βββ DadosCadastroResposta.java
β β β βββ DadosDetalhamentoResposta.java
β β β βββ DadosListagemTotalResposta.java
β β βββ token
β β β βββ DadosTokenJWT.java
β β βββ topico
β β β βββ validar
β β β β βββ DadosValidarResposta.java
β β β βββ DadosAtualizacaoTopico.java
β β β βββ DadosCadastroTopico.java
β β β βββ DadosDetalhamentoResumidoTopico.java
β β β βββ DadosListagemTotalTopico.java
β β β βββ DadosListagemUnicoTopico.java
β β βββ usuario
β β βββ DadosCadastroUsuario.java
β β βββ DadosDetalhamentoUsuario.java
β β βββ DadosListagemUsuario.java
β β βββ DadosLogin.java
β βββ infra
β β βββ exception
β β β βββ TratadorDeErros.java
β β β βββ ValidacaoException.java
β β βββ security
β β β βββ SecurityConfigurations.java
β β β βββ SecurityFilter.java
β β βββ springdoc
β β βββ SpringDocConfigurations.java
β βββ repository
β β βββ CursoRepository.java
β β βββ PerfilRepository.java
β β βββ RespostaRepository.java
β β βββ TopicoRepository.java
β β βββ UsuarioRepository.java
β βββ service
β β βββ AutenticacaoService.java
β β βββ CursoService.java
β β βββ PerfilService.java
β β βββ RespostaService.java
β β βββ TokenService.java
β β βββ TopicoService.java
β β βββ UsuarioService.java
β βββ ApiApplication.java
βββ README.md
Os testes estΓ£o organizados por mΓ³dulo e divididos em cenΓ‘rios de sucesso (acertivos) e erro:
test
βββ hub.forum.api
βββ controller
β βββ all
β β βββ CadastroControllersTestErro400.java
β β βββ CadastroControllersTestOk200.java
β βββ resposta
β β βββ acertivos
β β β βββ RespostaControllerAtualizarTest.java
β β β βββ RespostaControllerDeletarRespostaTest.java
β β β βββ RespostaControllerListarTest.java
β β βββ erros
β β βββ RespostaControllerAtualizarTestERRO.java
β β βββ RespostaControllerDeletarRespostaTestERRO.java
β βββ topico
β βββ acertivos
β β βββ TopicoControllerAtualizarTest.java
β β βββ TopicoControllerDeletarTopicoTest.java
β β βββ TopicoControllerListarByIdTest.java
β β βββ TopicoControllerListarTest.java
β β βββ TopicoControllerMarcarSolucaoTest.java
β βββ erros
β βββ TopicoControllerAtualizarTestERRO.java
β βββ TopicoControllerDeletarTopicoTestERRO.java
β βββ TopicoControllerMarcarSolucaoTestERRO.java
βββ service
βββ all
β βββ CadastroCompletoTest.java
βββ resposta
β βββ acertivos
β β βββ RespostaServiceAtualizarTest.java
β β βββ RespostaServiceDeletarRespostaTest.java
β β βββ RespostaServiceMarcarSolucaoTest.java
β βββ erros
β βββ RespostaServiceAtualizarTestERRO.java
β βββ RespostaServiceDeletarRespostaTestERRO.java
β βββ RespostaServiceMarcarSolucaoTestERRO.java
βββ topico
βββ acertivos
β βββ TopicoServiceAtualizarTest.java
β βββ TopicoServiceDeletarTopicoTest.java
β βββ TopicoServiceListarByIdTest.java
βββ erros
βββ TopicoServiceAtualizarTestERRO.java
βββ TopicoServiceDeletarTestERRO.java
βββ TopicoServiceListarByIdTestERRO.java
- β Java 17 ou superior
- π¬ MySQL instalado
- π» IDE de sua preferΓͺncia (IntelliJ IDE, VSCode, Eclipse etc.)
- Clone o repositΓ³rio
git clone https://github.com/renancvitor/challenge-forum-hub-api.git- Acesse a pasta do projeto
cd challenge-forum-hub-api- Configure o banco de dados no arquivo
src/main/resources/application.propertiescom suas credenciais locais. Ao iniciar o projeto, as migrations serΓ£o aplicadas automaticamente pelo Flyway.
spring.datasource.url=jdbc:mysql://localhost:3306/nome_do_banco
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha- Execute o projeto com o Maven Wrapper:
./mvnw spring-boot:run- Acesse o Swagger em:
http://localhost:8080/swagger-ui/index.html- FaΓ§a login para obter o token JWT e utilizar nas requisiΓ§Γ΅es protegidas.
AgradeΓ§o Γ Alura por essa oportunidade de aprendizado contΓnuo e por incentivar o desenvolvimento de habilidades de programaΓ§Γ£o de forma estruturada e desafiadora. π Este projeto consolidou habilidades prΓ‘ticas em desenvolvimento de APIs RESTful robustas, autenticaΓ§Γ£o segura com Spring Security e JWT, tratamento global de exceΓ§Γ΅es e versionamento controlado de banco com Flyway β competΓͺncias amplamente aplicadas em desenvolvimento back-end profissional.
Se vocΓͺ quiser contribuir para o projeto, siga estas etapas:
- FaΓ§a um fork deste repositΓ³rio.
- Crie uma nova branch (
git checkout -b feature/alguma-coisa). - FaΓ§a suas mudanΓ§as.
- Envie um pull request explicando as mudanΓ§as realizadas.
Obrigado pelo interesse em contribuir!
Se tiver dΓΊvidas ou sugestΓ΅es, sinta-se Γ vontade para entrar em contato:
- π§ E-mail: [email protected]
- π¦ LinkedIn: Renan Vitor
π Este projeto estΓ‘ licenciado sob a LicenΓ§a MIT, o que significa que vocΓͺ pode utilizΓ‘-lo, modificar, compartilhar e distribuir livremente, desde que mantenha os devidos crΓ©ditos aos autores e inclua uma cΓ³pia da licenΓ§a original - veja o arquivo LICENSE para detalhes ou acesse a licenΓ§a MIT oficial.
