{"id":21862118,"url":"https://github.com/igorbrizack/blogsapi","last_synced_at":"2026-04-08T11:31:37.350Z","repository":{"id":115372822,"uuid":"542208606","full_name":"IgorBrizack/BlogsApi","owner":"IgorBrizack","description":"API de gerenciamento de um Blog com arquitetura MSC.","archived":false,"fork":false,"pushed_at":"2022-09-28T15:02:08.000Z","size":269,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T14:26:24.063Z","etag":null,"topics":["api-rest","docker","express-js","javascript","joi-validation","msc","nodejs","orm-framework","sequelize","sql"],"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/IgorBrizack.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":"2022-09-27T17:28:31.000Z","updated_at":"2023-03-22T18:33:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"6fdc3502-850c-4bc5-9060-e85a96a51ed5","html_url":"https://github.com/IgorBrizack/BlogsApi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/IgorBrizack/BlogsApi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorBrizack%2FBlogsApi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorBrizack%2FBlogsApi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorBrizack%2FBlogsApi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorBrizack%2FBlogsApi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IgorBrizack","download_url":"https://codeload.github.com/IgorBrizack/BlogsApi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorBrizack%2FBlogsApi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31554012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"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","javascript","joi-validation","msc","nodejs","orm-framework","sequelize","sql"],"created_at":"2024-11-28T03:13:53.849Z","updated_at":"2026-04-08T11:31:37.324Z","avatar_url":"https://github.com/IgorBrizack.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📝 Projeto Blogs API\n\n## 📄 Sobre\n\nFoi desenvolvido uma API e um banco de dados para a produção de conteúdo para um blog, utilizando autenticadores e ORM!\n\n## 📋 Execute o projeto em sua máquina\n\nClone o repositório:\n\n```\ngit clone git@github.com:IgorBrizack/BlogsApi.git\n```\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e🐋 Rodando no Docker vs Localmente\u003c/strong\u003e\u003c/summary\u003e\n  \n  ## 👉 Com Docker\n \n  **:warning: 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 :information_source: 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 :information_source: 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 :information_source: Instale as dependências [**Caso existam**] com `npm install`. (Instale dentro do container)\n  \n  - **:warning: Atenção:** Caso opte por utilizar o Docker, **TODOS** os comandos disponíveis no `package.json` (npm start, npm test, npm run dev, ...) devem ser executados **DENTRO** do container, ou seja, no terminal que aparece após a execução do comando `docker exec` citado acima. \n\n  - **:warning: Atenção:** O **git** dentro do container não vem configurado com suas credenciais. Ou faça os commits fora do container, ou configure as suas credenciais do git dentro do container.\n\n  - **:warning: Atenção:** Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.\n\n  - ✨ **Dica:** A extensão `Remote - Containers` (que estará na seção de extensões recomendadas do VS Code) é indicada para que você possa desenvolver sua aplicação no container Docker direto no VS Code, como você faz com seus arquivos locais.\n\n  ![sequelize test](./public/remote-container.png)\n\n  \u003cbr /\u003e\n  \n  ## 👉 Sem Docker\n\n  \u003e :information_source: Instale as dependências [**Caso existam**] com `npm install`\n  \n  - **:warning: Atenção:** Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.\n\n  - **✨ Dica:** Para rodar o projeto desta forma, obrigatoriamente você deve ter o `node` instalado em seu computador.\n  - **✨ Dica:** O avaliador espera que a versão do `node` utilizada seja a 16.\n\n  \u003cbr/\u003e\n\u003c/details\u003e\n\n## 👨🏻‍💻 Habilidades\n\n- Endpoints que estão conectados com o banco de dados seguindo os princípios do REST;\n- Criar uma API RESTful utilizando a arquitetura MSC (Model-Service-Controller);\n- Aplicação em Node.js usando o pacote sequelize para fazer um CRUD de posts;\n- Transactions: Uma transação simboliza uma unidade de trabalho indivisível executada do banco de dados de forma independente de outras transações;\n- Validar dados das requisições com a biblioteca Joi.\n\n## 🔎 Rotas\n\n### Login\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePOST /login\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Se o login for feito com sucesso retorna um token para o usuário.\n\u003c/details\u003e\n\n### User\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePOST /user\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Cadastra um novo usuário, permitindo apenas um email válido, gerando um token.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGET /user\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Traz todos users do banco de dados.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGET /user/:id\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Traz um user por id do banco de dados.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDELETE /user/me\u003c/strong\u003e\u003c/summary\u003e\n   \u003c/br\u003e\n  • Deleta o usuário logado.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n### Categories\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePOST /categories\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Cadastra uma nova categoria.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGET /categories\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Traz todas categorias do banco de dados.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n### Post\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePOST /post\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Adiciona um novo blog ao usuário logado e vincula as categorias em suas tabelas no banco de dados.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGET /post\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Traz todos os blogs post e as categorias do banco de dados.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGET /post/:id\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Traz o blog post por ID e as categorias do banco de dados.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePUT /post/:id\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Atualiza o blog post por ID.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDELETE /post/:id\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Deleta o blog post por ID.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGET /post/search?q=:searchTerm\u003c/strong\u003e\u003c/summary\u003e\n  \u003c/br\u003e\n  • Retornar um array de blogs post que contém em seu título ou conteúdo o termo passado na URL.\n  \u003c/br\u003e\n  • Valida o token - req.authorization.\n\u003c/details\u003e\n\n## 🛠️ Ferramentas \u0026 Metodologias Utilizadas\n\n- [Node.js](https://nodejs.org/en/);\n- [Express.js](https://expressjs.com/);\n- [MYSQL](https://www.mysql.com/);\n- [mysql2](https://www.npmjs.com/package/mysql2);\n- [Sequelize(ORM)](https://sequelize.org/);\n- [JWT(Autenticação)](https://jwt.io/);\n- [Joi](https://joi.dev/api/?v=17.6.0);\n- [Docker](https://www.docker.com/);\n- JavaScript ES6+;\n\n---\n⌨️ desenvolvido por [Igor Brizack](https://www.linkedin.com/in/igor-brizack/) 😄\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figorbrizack%2Fblogsapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figorbrizack%2Fblogsapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figorbrizack%2Fblogsapi/lists"}