{"id":24132823,"url":"https://github.com/lindauroneto/echo-forumhub","last_synced_at":"2026-05-01T23:33:08.309Z","repository":{"id":271813797,"uuid":"914598500","full_name":"LindauroNeto/Echo-ForumHub","owner":"LindauroNeto","description":"Repositório do Echo Fórum. Envolvendo os conhecimentos obtidos no ONE G7.","archived":false,"fork":false,"pushed_at":"2025-01-25T01:41:41.000Z","size":133,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T08:32:55.458Z","etag":null,"topics":["alura","java-17","oracle","oracle-next-education","spring-boot","spring-data-jpa","spring-framework","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LindauroNeto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-09T23:05:45.000Z","updated_at":"2025-01-25T01:41:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"2a8c8c11-534b-42d6-aae6-9671ddfc5c1b","html_url":"https://github.com/LindauroNeto/Echo-ForumHub","commit_stats":null,"previous_names":["lindauroneto/echo-forumhub"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LindauroNeto/Echo-ForumHub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LindauroNeto%2FEcho-ForumHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LindauroNeto%2FEcho-ForumHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LindauroNeto%2FEcho-ForumHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LindauroNeto%2FEcho-ForumHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LindauroNeto","download_url":"https://codeload.github.com/LindauroNeto/Echo-ForumHub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LindauroNeto%2FEcho-ForumHub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32517222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alura","java-17","oracle","oracle-next-education","spring-boot","spring-data-jpa","spring-framework","spring-security"],"created_at":"2025-01-11T22:38:24.887Z","updated_at":"2026-05-01T23:33:08.290Z","avatar_url":"https://github.com/LindauroNeto.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ForumHub - Compartilhando conhecimento 💬📢\nSistema de fórum para a criação de tópicos para sanar dúvidas de cursos e envio de respostas.\n\n## 🔨 Funcionalidades\nO sistema possui funcionalidades para as partes de **Tópicos**, **Respostas** e **Usuários**.\n\n### Tópicos\n- ***POST /topicos***\n  - **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.\n- ***GET /topicos***\n- ***GET /topicos/{idTopico}***\n  - **Listagem dos tópicos**: Listagem única (informando o ID) ou de todos os tópicos criados, em forma paginada.\n- ***PUT /topicos/{idTopico}***\n  - **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.\n- ***PUT /topicos/{idTopico}/finalizar***\n  - **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.\n- ***DELETE /topicos/{idTopico}***\n  - **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).\n\n*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*\n\n### Respostas\n*Para todos os métodos de ``Respostas``, será sempre necessário enviar o ID do tópico.*\n- ***POST /topicos/{idTopico}/resposta***\n  - **Envio de respostas**: Ao preencher o campo `mensagem`, a reposta é registrada e salva no banco de dados.\n- ***GET /topicos/{idTopico}/resposta***\n- ***GET /topicos/{idTopico}/resposta/{idResposta}***\n  - **Listagem de respostas**: Realização de listagem única (informando o ID das respostas) ou de todas as respostas registradas, de forma paginada.\n- ***PUT /topicos/{idTopico}/resposta/{idResposta}***\n  - **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.\n- ***DELETE /topicos/{idTopico}/resposta/{idResposta}***\n  - **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.\n\n### Usuários\n- ***POST /usuario/cadastro***\n  - **Cadastro**: Realização de cadastro do usuário ao preencher os dados nos campos de `usuario` e `senha`.\n- ***POST /usuario/login***\n  - **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``.\n- ***GET /usuario***\n- ***GET /usuario/{id}***\n  - **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).\n- ***DELETE /usuario/{id}***\n  - **Excluir usuário**: Realizada somente pelo próprio usuário, que ao informar o seu ID, pode excluir a sua \"conta\".\n\n## 🍃 Como inicializar a aplicação\n### Pré-Requisitos\n- Java 17\n- Apache Maven 4.0.0\n- MySQL 8.0\n\n### Setup do sistema\n1. Primeiramente, clone o repositório:\n```bash\ngit clone https://github.com/LindauroNeto/Echo-ForumHub.git\n```\n\n2. Crie o banco de dados para a aplicação (fora isso, as tabelas serão criadas automaticamente)\n```bash\nCREATE DATABASE \u003cnome_do_banco_de_dados\u003e;\n```\n3. Atualize as configurações do `application.properties` (tendo em vista as variáveis de ambiente)\n![Arquivo application.properties](https://github.com/user-attachments/assets/07ed6ffc-77ed-4661-9630-5bff21070d9e)\n\n### Utilização das variáveis de ambiente\nNo projeto há 4 variáveis de ambiente\n- `MYSQL_URL`: URL que identifica o acesso para o banco de dados.\n- `MYSQL_USERNAME`: Nome do usuário do banco de dados.\n- `MYSQL_PASSWORD`: Senha para acesso ao banco de dados.\n- `Secret`: Senha para a geração de algortimo HMAC256.\n\n### Execução da aplicação\n1. Entre no diretório do projeto\n```bash\ncd \u003ccaminho até a pasta\u003e/.../Echo-ForumHub\n```\n2. Faça o seu build\n```bash\nmvn clean package\n```\n3. Escreva o seguinte comando para executá-lo\n```bash\njava -DMYSQL_URL=\u003curl_da_aplicação\u003e -DMYSQL_USERNAME=\u003cnome_do_usuario_do_banco\u003e -DMYSQL_PASSWORD=\u003csenha_do_usuario_do_banco\u003e -DSecret=\u003csenha_do_algoritmo\u003e -jar target/EchoForumHub-0.0.1-SNAPSHOT.jar\n```\n\n### Carregamento do sistema\nA imagem seguinte é a que deve aparecer na sua tela!\n![Terminal Springboot](https://github.com/user-attachments/assets/627152b4-3ec5-4821-92b6-ba174db964be)\n\n## 📄 Documentação\nAo inicializar a aplicação, é possível acessar a documentação por via do JSON, no endereço `http://server:port/v3/api-doc`.\n![Documentação em JSON](https://github.com/user-attachments/assets/0b775673-7cd1-4d7f-bcaa-63f4cbbf4f80)\n\nOu pelo HTML `http://server:port/swagger-ui.html`.\n![Documentação em página web](https://github.com/user-attachments/assets/1a4e7305-8818-49bb-a715-f12911d66962)\n\nSendo:\n- `server`: O nome do servidor ou IP.\n- `port`: A porta do servidor.\n\n## 🧠 Conhecimentos aplicados\n- Estilo de empacotamento em **Package by Layer**;\n- Criação de **API REST**;\n- **Persistência dos Dados** das informações;\n- Uso **JPA** para a autenticação de usuários;\n- Utilização de **DTO**s para a transferência de dados;\n- Autenticação de usuários por via de **Tokens JWT**;\n- Criação de **Filters** para barragem de indivíduos não autorizados no sistema;\n- Tratamento de **Exceptions** com o *ControllerAdvice*;\n- Uso dos módulos **Spring Data** e **Spring Security**;\n- Auxílio do **Spring Boot** para o desenvolvimento da aplicação, utilizando as Beans: **Component**, **Configuration**, **Controller**, **ControllerAdvice**, **Service** e **Repository**.\n\n## 💻 Tecnologias utilizadas no projeto\n- [``Auth0 (JWT)``](https://github.com/auth0/java-jwt)\n- [``Java 17``](https://docs.oracle.com/en/java/javase/17/docs/api/index.html)\n- [``Maven v4.0.0``](https://maven.apache.org/index.html)\n- [``MySQL``](https://www.mysql.com/)\n- [``Spring Boot``](https://spring.io/projects/spring-boot)\n- [``Spring Tool Suite 4 (IDE)``](https://spring.io/tools)\n- [``SpringDoc OpenAPI``](https://springdoc.org/)\n\n## 📜 Licença\nEste projeto é licenciado sob a Apache License. Para mais informações, veja o arquivo [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flindauroneto%2Fecho-forumhub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flindauroneto%2Fecho-forumhub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flindauroneto%2Fecho-forumhub/lists"}