Skip to content

renancvitor/challenge-forum-hub-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’¬ FΓ³rumHub β€” API REST com Spring Boot 3, MySQL e JWT
(Alura - Challenge)


πŸ“– VisΓ£o Geral do Projeto

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)

βš™οΈ Tecnologias Utilizadas


🧰 Ferramentas Utilizadas

  • πŸ’» 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.

πŸ”„ Migrations e Versionamento de Banco

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.


✨ Funcionalidades

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.

πŸ” AutenticaΓ§Γ£o e SeguranΓ§a

  • Cadastro e login de usuΓ‘rios
  • AutenticaΓ§Γ£o via JWT
  • Controle de acesso baseado em perfis de usuΓ‘rio

πŸ“š Gerenciamento de ConteΓΊdo

  • 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Γ§Γ΅es e Tratamento de Erros

  • ValidaΓ§Γ£o de dados de entrada (DTOs com Bean Validation)
  • Mensagens de erro claras e padronizadas
  • Tratamento centralizado de exceΓ§Γ΅es

πŸ“Š DocumentaΓ§Γ£o


πŸ“½ DocumentaΓ§Γ£o Visual

🌐 API - Swagger

Para ver a interface Swagger em aΓ§Γ£o, acesse as demonstraΓ§Γ΅es visuais com GIFs interativos mostrando os principais endpoints da API.

πŸ—‚οΈ Diagrama ER

Diagrama ER


πŸ§ͺ Testes Automatizados

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:


πŸ“¦ OrganizaΓ§Γ£o do Projeto

β”œβ”€β”€ 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

πŸ§ͺ Cobertura de Testes Automatizados

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

πŸš€ Como Executar o Projeto

PrΓ©-requisitos:

Passo a passo:

  1. Clone o repositΓ³rio
git clone https://github.com/renancvitor/challenge-forum-hub-api.git
  1. Acesse a pasta do projeto
cd challenge-forum-hub-api
  1. Configure o banco de dados no arquivo src/main/resources/application.properties com 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
  1. Execute o projeto com o Maven Wrapper:
./mvnw spring-boot:run

πŸ”‘ Acesso Γ  API

http://localhost:8080/swagger-ui/index.html
  • FaΓ§a login para obter o token JWT e utilizar nas requisiΓ§Γ΅es protegidas.

πŸ“’ Agradecimento

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.


🀝 Contribuiçáes

Se vocΓͺ quiser contribuir para o projeto, siga estas etapas:

  1. FaΓ§a um fork deste repositΓ³rio.
  2. Crie uma nova branch (git checkout -b feature/alguma-coisa).
  3. FaΓ§a suas mudanΓ§as.
  4. Envie um pull request explicando as mudanΓ§as realizadas.

Obrigado pelo interesse em contribuir!


πŸ“« Contato

Se tiver dΓΊvidas ou sugestΓ΅es, sinta-se Γ  vontade para entrar em contato:


πŸ“„ LicenΓ§a

πŸ“Œ 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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages