{"id":22933987,"url":"https://github.com/jonataslaguna/blogs-api","last_synced_at":"2026-04-13T14:31:26.069Z","repository":{"id":206447354,"uuid":"716663960","full_name":"jonataslaguna/blogs-api","owner":"jonataslaguna","description":"API RESTful Node.js com sequelize utilizando a arquitetura em camadas e um banco de dados para a produção de conteúdo para um blog.","archived":false,"fork":false,"pushed_at":"2023-12-21T17:12:33.000Z","size":459,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-01T18:47:12.401Z","etag":null,"topics":["api-rest","docker","express-js","jwt","mysql","node-js","sequelize"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/jonataslaguna.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}},"created_at":"2023-11-09T15:56:41.000Z","updated_at":"2023-11-16T18:40:18.000Z","dependencies_parsed_at":"2023-12-24T06:39:51.065Z","dependency_job_id":null,"html_url":"https://github.com/jonataslaguna/blogs-api","commit_stats":{"total_commits":34,"total_committers":2,"mean_commits":17.0,"dds":0.08823529411764708,"last_synced_commit":"6dda75353ddc0a5149855e8c8f016141035d9f96"},"previous_names":["jonataslaguna/blogs-api-"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jonataslaguna/blogs-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonataslaguna%2Fblogs-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonataslaguna%2Fblogs-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonataslaguna%2Fblogs-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonataslaguna%2Fblogs-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonataslaguna","download_url":"https://codeload.github.com/jonataslaguna/blogs-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonataslaguna%2Fblogs-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31757477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T13:27:56.013Z","status":"ssl_error","status_checked_at":"2026-04-13T13:21:23.512Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api-rest","docker","express-js","jwt","mysql","node-js","sequelize"],"created_at":"2024-12-14T11:37:05.003Z","updated_at":"2026-04-13T14:31:26.049Z","avatar_url":"https://github.com/jonataslaguna.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blogs API\n\nAPI RESTful Node.js com sequelize utilizando a arquitetura em camadas e um banco de dados para a produção de conteúdo para um blog. \n\n## Instalação\n\n#### Após clonar o repositório, navegue até a raíz do projeto e instale as dependências com o comando:\n\n```bash\nnpm install\n```\n\n🐳 Iniciando a aplicação no Docker Compose\n\n\u003e Antes de começar, seu docker-compose precisa estar na versão 1.29 ou superior. [Veja aqui](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-pt) ou [na documentação](https://docs.docker.com/compose/install/) como instalá-lo. No primeiro artigo, você pode substituir onde está com `1.26.0` por `1.29.2`.**\n  \n\n\u003e  Rode os serviços `node` e `db` com o comando `docker-compose up -d --build`.\n\n  - Lembre-se de parar o `mysql` se estiver usando localmente na porta padrão (`3306`), ou adapte, caso queria fazer uso da aplicação em containers;\n\n  - Esses serviços irão inicializar um container chamado `blogs_api` e outro chamado `blogs_api_db`;\n\n  - A partir daqui você pode rodar o container `blogs_api` via CLI ou abri-lo no VS Code;\n\n  \u003e Use o comando `docker exec -it blogs_api bash`\n\n  - Ele te dará acesso ao terminal interativo do container criado pelo compose, que está rodando em segundo plano.\n\n  \u003e Instale as dependências [**Caso existam**] com `npm install`. (Instale dentro do container)\n\n#\n\n🖥️ Iniciando a aplicação localmente\n\n \u003e Instale as dependências [**Caso existam**] com `npm install`\n  \n  - Lembre-se de usar o prefixo `env $(cat .env)` ao rodar os comandos localmente para carregar as variáveis de ambiente do arquivo `.env`. Por exemplo:\n  \n    ```bash\n    env $(cat .env) npm run dev\n    ```\n\n  -  Para rodar o projeto desta forma, obrigatoriamente você deve ter o `node` instalado em seu computador.\n  -  O avaliador espera que a versão do `node` utilizada seja a 16.\n\n\u003cdetails\u003e\n  \u003csummary  id=\"diagrama\"\u003e\n    \u003cstrong\u003e🎲 Diagrama ER e Entidades\u003c/strong\u003e\n  \u003c/summary\u003e\n\n#### Formato das entidades\n\n  ![DER](./public/der.png)\n\n  ---\n\n - #### Scripts prontos\n\n    ---\n\n    - Cria o banco e gera as tabelas:\n    ```json\n    \"prestart\": \"npx sequelize-cli db:create \u0026\u0026 npx sequelize-cli db:migrate\"\n    ```\n\n    - Insere dados/Popula a tabela:\n    ```json\n    \"seed\": \"npx sequelize-cli db:seed:all\"\n    ```\n\u003c/details\u003e\n\n## Funcionalidades\n\n### Login\n\n  - Endpoint: `POST /login`\n  - Retorna um token de acesso caso o usuário já esteja cadastrado no banco de dados.\n  - O corpo da requisição deve conter o email e o password do usuário cadastrado seguindo o formato abaixo:\n\n     ```json\n    {\n      \"email\": \"lewishamilton@gmail.com\",\n      \"password\": \"123456\"\n    }\n    ```\n  - Efetuando o login corretamente retornará um token neste formato:\n  \n    ```json\n    {\n      \"token\": \"eyJhbGciOiJI[...]\"\n    }\n    ```\n\n    \u003e Aviso: Para utilizar o restante das funcionalidades (exeto na criação de um novo usuário), é necessário utilizar esse token de acesso no header da requisição: \u003c/br\u003e\n     ![DER](./public/header-auth.png)\n\n### User\n\n\n- **Listar usuários:**\n\n  - Endpoint: `GET /user`\n\n- **Encontrar o usuário pelo Id:**\n  - Endpoint: `GET /user/:id`\n\n- **Criar Usuário:**\n  - Endpoint: `POST /user`\n  - O corpo da requisição deve estar neste formato abaixo:\n  \n     ```json\n     {\n     \"displayName\": \"Brett Wiltshire\",\n     \"email\": \"brett@email.com\",\n     \"password\": \"123456\",\n     \"image\": \"http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png\"\n    }\n    ```\n\n- **Remover usuário:**\n  - Endpoint: `DELETE user/me`\n  - Remove os dados do usuário do banco de dados, apenas se pertencer ao usuário logado.\n\n### Posts\n\n- **Listar Posts:**\n  - Endpoint: `GET /post`\n  \n- **Encontrar Post por ID:**\n  - Endpoint: `GET /post/:id`\n  - Retorna as informações detalhadas de um post específico com base no ID fornecido.\n\n- **Criar Novo Post:**\n  - Endpoint: `POST /post`\n  - Permite a criação de um novo post. O corpo da requisição deve estar conforme o exemplo abaixo:\n\n    ```json\n    {\n      \"title\": \"Hello World\",\n      \"content\": \"....\",\n      \"categoryIds\": [2,1]\n    }\n    ```\n\n- **Pesquisar Posts:**\n  - Endpoint: `GET /post/search?q=:searchTerm`\n  - Mostra blogs posts que contenham em seu título ou conteúdo o termo passado na URL.\n\n   **Update Posts:**\n  - Endpoint: `PUT /post/:id`\n  - Atualiza o post solicitado, apenas se o post pertencer ao usuário logado.\n  - O corpo da requisição precisa estar neste formato abaixo:\n\n     ```json\n    {\n      \"title\": \"Latest updates, August 1st\",\n      \"content\": \"The whole text for the blog post goes here in this key\"\n    }\n    ```\n- **Deletar Post:**\n  - Endpoint: `DELETE /post/:id`\n  - Deleta um blog post baseado no id do banco de dados se ele existir, e se pertencer ao usuário logado.\n\n### Categories\n\n- **Listar Categorias:**\n  - Endpoint: `GET /categories`\n  \n- **Criar Categoria:**\n  - Endpoint: `POST /categories`\n  - Para criar uma nova categoria o corpo da requisição precisa estar neste formato abaixo:\n\n     ```json\n    {\n       \"name\": \"TypeScript\"\n    }\n    ```\n\n\u003e \u003cstrong\u003eOBS:\u003c/strong\u003e Na raiz do projeto, você encontrará um arquivo Thunder Client (thunder-collection-blogs-api.json) que pode ser importado no Thunder Client para facilitar as requisições.\n\n## Contribuição\n\nEste projeto está aberto para contribuições. Se você deseja contribuir, siga estas etapas:\n\n1. Faça um fork do projeto\n2. Crie uma nova branch (`git checkout -b feature/sua-feature`)\n3. Faça commit das alterações (`git commit -m 'Adicione sua feature'`)\n4. Faça push para a branch (`git push origin feature/sua-feature`)\n5. Abra um Pull Request\n\n## Contato\n\nSe você deseja entrar em contato comigo, sinta-se à vontade para enviar um e-mail para [jonataslaguna.js@gmail.com](mailto:jonataslaguna.js@gmail.com).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonataslaguna%2Fblogs-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonataslaguna%2Fblogs-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonataslaguna%2Fblogs-api/lists"}