https://github.com/lindauroneto/echo-forumhub
Repositório do Echo Fórum. Envolvendo os conhecimentos obtidos no ONE G7.
https://github.com/lindauroneto/echo-forumhub
alura java-17 oracle oracle-next-education spring-boot spring-data-jpa spring-framework spring-security
Last synced: about 2 months ago
JSON representation
Repositório do Echo Fórum. Envolvendo os conhecimentos obtidos no ONE G7.
- Host: GitHub
- URL: https://github.com/lindauroneto/echo-forumhub
- Owner: LindauroNeto
- License: apache-2.0
- Created: 2025-01-09T23:05:45.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-25T01:41:41.000Z (over 1 year ago)
- Last Synced: 2025-03-01T08:32:55.458Z (over 1 year ago)
- Topics: alura, java-17, oracle, oracle-next-education, spring-boot, spring-data-jpa, spring-framework, spring-security
- Language: Java
- Homepage:
- Size: 130 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ForumHub - Compartilhando conhecimento 💬📢
Sistema de fórum para a criação de tópicos para sanar dúvidas de cursos e envio de respostas.
## 🔨 Funcionalidades
O sistema possui funcionalidades para as partes de **Tópicos**, **Respostas** e **Usuários**.
### Tópicos
- ***POST /topicos***
- **Cadastro de um novo tópico**: Ao preencher na requisição os campos: `titulo`, `mensagem`, e `curso`, a requisição é enviada ao sistema e salva no banco de dados.
- ***GET /topicos***
- ***GET /topicos/{idTopico}***
- **Listagem dos tópicos**: Listagem única (informando o ID) ou de todos os tópicos criados, em forma paginada.
- ***PUT /topicos/{idTopico}***
- **Atualização de informações**: Ao informar no caminho da url o ID do tópico, é possível alterar as informações do tópico, preenchendo os campos `titulo` e `mensagem` no corpo da requisição, aos novos valores atribuídos.
- ***PUT /topicos/{idTopico}/finalizar***
- **Finalização de tópico**: Ao informar no caminho da url o ID do tópico e preenchendo o campo de `mensagem`, o tópico é considerado **RESOLVIDO**, o finalizando e inibindo o envio de novas respostas.
- ***DELETE /topicos/{idTopico}***
- **Exclusão do tópico**: Ao informar no caminho da url o ID do tópico, ele é excluído de forma lógica do sistema (sendo necessário o acesso pelo banco de dados para realizar uma exclusão definitiva do usuário).
*OBS.: "**Exclusão lógica**" é a desativação do usuário do sistema, não sendo possível mais utilizá-lo. E "**Exclusão definitiva**", seria excluir o usuário permanentemente do banco de dados, com o método DELETE, não sendo mais possível recuperá-lo*
### Respostas
*Para todos os métodos de ``Respostas``, será sempre necessário enviar o ID do tópico.*
- ***POST /topicos/{idTopico}/resposta***
- **Envio de respostas**: Ao preencher o campo `mensagem`, a reposta é registrada e salva no banco de dados.
- ***GET /topicos/{idTopico}/resposta***
- ***GET /topicos/{idTopico}/resposta/{idResposta}***
- **Listagem de respostas**: Realização de listagem única (informando o ID das respostas) ou de todas as respostas registradas, de forma paginada.
- ***PUT /topicos/{idTopico}/resposta/{idResposta}***
- **Modificação de resposta**: Ao informar no caminho da url o ID da resposta e preenchendo o campo `mensagem`, a resposta vai ser modificada/atualizada.
- ***DELETE /topicos/{idTopico}/resposta/{idResposta}***
- **Exclusão da resposta**: Ao informar no caminho da url o ID da resposta, a mesma será excluída de forma lógica do sistema.
### Usuários
- ***POST /usuario/cadastro***
- **Cadastro**: Realização de cadastro do usuário ao preencher os dados nos campos de `usuario` e `senha`.
- ***POST /usuario/login***
- **Login**: Efetuação de login do usuário com os dados que já foram cadastrados anteriormente. O permitindo realizar as operações dentro de ``Tópicos``.
- ***GET /usuario***
- ***GET /usuario/{id}***
- **Visualizar usuários**: Levantamento dos usuários que estão cadastrados no sistema, podendo visualizar todos ou somente um, informando o ID (Ao visualizar os dados dos usuários).
- ***DELETE /usuario/{id}***
- **Excluir usuário**: Realizada somente pelo próprio usuário, que ao informar o seu ID, pode excluir a sua "conta".
## 🍃 Como inicializar a aplicação
### Pré-Requisitos
- Java 17
- Apache Maven 4.0.0
- MySQL 8.0
### Setup do sistema
1. Primeiramente, clone o repositório:
```bash
git clone https://github.com/LindauroNeto/Echo-ForumHub.git
```
2. Crie o banco de dados para a aplicação (fora isso, as tabelas serão criadas automaticamente)
```bash
CREATE DATABASE ;
```
3. Atualize as configurações do `application.properties` (tendo em vista as variáveis de ambiente)

### Utilização das variáveis de ambiente
No projeto há 4 variáveis de ambiente
- `MYSQL_URL`: URL que identifica o acesso para o banco de dados.
- `MYSQL_USERNAME`: Nome do usuário do banco de dados.
- `MYSQL_PASSWORD`: Senha para acesso ao banco de dados.
- `Secret`: Senha para a geração de algortimo HMAC256.
### Execução da aplicação
1. Entre no diretório do projeto
```bash
cd /.../Echo-ForumHub
```
2. Faça o seu build
```bash
mvn clean package
```
3. Escreva o seguinte comando para executá-lo
```bash
java -DMYSQL_URL= -DMYSQL_USERNAME= -DMYSQL_PASSWORD= -DSecret= -jar target/EchoForumHub-0.0.1-SNAPSHOT.jar
```
### Carregamento do sistema
A imagem seguinte é a que deve aparecer na sua tela!

## 📄 Documentação
Ao inicializar a aplicação, é possível acessar a documentação por via do JSON, no endereço `http://server:port/v3/api-doc`.

Ou pelo HTML `http://server:port/swagger-ui.html`.

Sendo:
- `server`: O nome do servidor ou IP.
- `port`: A porta do servidor.
## 🧠 Conhecimentos aplicados
- Estilo de empacotamento em **Package by Layer**;
- Criação de **API REST**;
- **Persistência dos Dados** das informações;
- Uso **JPA** para a autenticação de usuários;
- Utilização de **DTO**s para a transferência de dados;
- Autenticação de usuários por via de **Tokens JWT**;
- Criação de **Filters** para barragem de indivíduos não autorizados no sistema;
- Tratamento de **Exceptions** com o *ControllerAdvice*;
- Uso dos módulos **Spring Data** e **Spring Security**;
- Auxílio do **Spring Boot** para o desenvolvimento da aplicação, utilizando as Beans: **Component**, **Configuration**, **Controller**, **ControllerAdvice**, **Service** e **Repository**.
## 💻 Tecnologias utilizadas no projeto
- [``Auth0 (JWT)``](https://github.com/auth0/java-jwt)
- [``Java 17``](https://docs.oracle.com/en/java/javase/17/docs/api/index.html)
- [``Maven v4.0.0``](https://maven.apache.org/index.html)
- [``MySQL``](https://www.mysql.com/)
- [``Spring Boot``](https://spring.io/projects/spring-boot)
- [``Spring Tool Suite 4 (IDE)``](https://spring.io/tools)
- [``SpringDoc OpenAPI``](https://springdoc.org/)
## 📜 Licença
Este projeto é licenciado sob a Apache License. Para mais informações, veja o arquivo [LICENSE](LICENSE).