{"id":21018275,"url":"https://github.com/abeatrizsc/blog-api","last_synced_at":"2026-04-29T21:33:42.387Z","repository":{"id":256434609,"uuid":"855247790","full_name":"ABeatrizSC/blog-api","owner":"ABeatrizSC","description":"API REST desenvolvida com Java, Spring Boot e MongoDB","archived":false,"fork":false,"pushed_at":"2024-09-10T16:40:16.000Z","size":34,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-20T12:31:55.201Z","etag":null,"topics":["api","api-rest","backend","java","mongo-compass","mongodb","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ABeatrizSC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-09-10T15:06:25.000Z","updated_at":"2024-09-19T03:40:31.000Z","dependencies_parsed_at":"2024-09-10T18:48:51.196Z","dependency_job_id":null,"html_url":"https://github.com/ABeatrizSC/blog-api","commit_stats":null,"previous_names":["abeatrizsc/blog-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fblog-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fblog-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fblog-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fblog-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ABeatrizSC","download_url":"https://codeload.github.com/ABeatrizSC/blog-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243447641,"owners_count":20292452,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["api","api-rest","backend","java","mongo-compass","mongodb","spring-boot"],"created_at":"2024-11-19T10:24:43.594Z","updated_at":"2025-12-29T21:04:59.190Z","avatar_url":"https://github.com/ABeatrizSC.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blog API REST\nProjeto API REST desenvolvida através do Curso de Java Completo, utilizando Spring Boot e o banco de dados MongoDB.\n\n## Objetivos gerais\nO projeto teve como foco aprender e revisar os seguintes tópicos:\n\n- Compreender as principais diferenças entre paradigma orientado a documentos e relacional\n- Implementar operações de CRUD\n- Refletir sobre decisões de design para um banco de dados orientado a documentos\n- Implementar associações entre objetos\n  - Objetos aninhados\n  - Referências\n- Realizar consultas com Spring Data e MongoRepository\n\n## Tecnologias utilizadas\nPara o desenvolvimento desta atividade, foram utilizadas as seguintes tecnologias:\n- Git\n- Java 17\n- Spring Boot v3.3.3\n- Apache Maven\n- MongoDB v7.0.14\n- MongoDB Compass v1.44.3\n- Postman\n\n**IDE utilizada: IntelliJ IDEA Community Edition 2024.2**\n\n## Uso de Query Methods e consultas com @Query\nDurante o projeto, pude aprender duas formas de realizar consultas com Query. Elas estão presentes em `PostRepository`:\n### Query Methods\nOs Query Methods são um recurso do Spring Data que permite criar consultas automaticamente com base no nome do método.\n\n```java\nList\u003cPost\u003e findByTitleContainingIgnoreCase(String text);\n````\n\n### Consultas com @Query\nOutra abordagem é o uso da anotação @Query, que permite a escrita de consultas personalizadas diretamente em Java. No exemplo abaixo, o método searchTitle utiliza uma consulta MongoDB para buscar posts cujo título corresponde a um regex (expressão regular), permitindo mais flexibilidade.\n\n```java\n@Query(\"{ 'title': { $regex: ?0, $options: 'i' } }\")\nList\u003cPost\u003e searchTitle(String text);\n````\n\n## Funcionalidades/Endpoints\nPara testar os seguintes endpoints, recomendo o uso do Postman, uma das ferramentas mais populares para testar e consumir APIs REST.\n### 1. **Listar Todos os Usuários**\n- **Endpoint:** `GET /users`\n- Retorna uma lista de todos os usuários cadastrados no sistema.\n\n### 2. **Buscar Usuário por ID**\n- **Endpoint:** `GET /users/{id}`\n- Busca e retorna as informações de um usuário com base no seu ID.\n\n### 3. **Inserir um Novo Usuário**\n- **Endpoint:** `POST /users`\n- Insere um novo usuário no banco de dados.\n- **Requisição:**\n  ```json\n  {\n    \"name\": \"Nome do Usuário\",\n    \"email\": \"email@example.com\"\n  }\n  ```\n\n### 4. **Atualizar um Usuário**\n- **Endpoint:** `PUT /users/{id}`\n- Atualiza as informações de um usuário existente com base no seu ID.\n- **Requisição:**\n  ```json\n  {\n    \"name\": \"Nome Atualizado\",\n    \"email\": \"email_atualizado@example.com\"\n  }\n  ```\n\n### 5. **Excluir um Usuário por ID**\n- **Endpoint:** `DELETE /users/{id}`\n- Remove um usuário do sistema com base no seu ID.\n\n### 6. **Listar Posts de um Usuário**\n- **Endpoint:** `GET /users/{id}/posts`\n- Retorna uma lista de todos os posts associados a um usuário específico.\n\n---\n\n### 7. **Buscar Post por ID**\n- **Endpoint:** `GET /posts/{id}`\n- Retorna um post específico com base no seu ID.\n\n### 8. **Buscar Posts por Título**\n- **Endpoint:** `GET /posts/titlesearch?text={title}`\n- Retorna uma lista de posts cujo título contém o texto fornecido como parâmetro.\n\n\n## Requisitos\nCertifique-se de ter as seguintes ferramentas instaladas e configuradas:\n- Java Development Kit (JDK) 11 ou superior\n- Apache Maven\n- MongoDB\n- MongoDB Compass\n\n## Instalação do Projeto\nSiga os passos abaixo para baixar, configurar e rodar o projeto no seu ambiente\n1. **Clone o repositório**\n```bash\ngit clone https://github.com/abeatrizsc/blog-api.git\n ```\n```bash\ncd blog-api\n ```\n\n2. **Compile o projeto e baixe as dependências**\n\n ```bash\nmvn clean compile\n ```\n ```bash\nmvn package\n ```\n\n3. **Execute o projeto**\n\n ```bash\njava -jar target/blog-API-0.0.1-SNAPSHOT.jar\n ```\n\n**OBS: Este projeto está configurado para rodar na porta padrão localhost:8080. Certifique-se de que ela esteja disponível ou mude-o para outra porta adicionando no arquivo `application.properties` o comando `server.port=${port:8081}`.**\n\n## Execução do Banco de Dados (MongoDB)\nCom o MongoDB já instalado, execute-o em seu terminal com o seguinte comando:\n ```bash\n mongod\n ```\nCertifique-se também de criar um banco de dados no MongoDB Compass chamado `workshop_mongo` e as collections `Post` e `User`. \n\n## Contato\nPara dúvidas ou problemas, entre em contato em:\n* Email: anabeatrizscarmoni@gmail.com\n* GitHub: github.com/ABeatrizSC\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabeatrizsc%2Fblog-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabeatrizsc%2Fblog-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabeatrizsc%2Fblog-api/lists"}