{"id":21930639,"url":"https://github.com/tonyycruz/blogs_api","last_synced_at":"2026-04-05T22:02:43.525Z","repository":{"id":103257314,"uuid":"532128020","full_name":"TonyyCruz/blogs_api","owner":"TonyyCruz","description":"Neste projeto, foram desenvolvidos uma API e um banco de dados para a produção de conteúdo para um blog","archived":false,"fork":false,"pushed_at":"2022-10-27T19:11:58.000Z","size":543,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-27T12:14:19.630Z","etag":null,"topics":["commit-conventions","express","joi","jwt","mysql","mysql2","nodejs","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/TonyyCruz.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-03T01:51:03.000Z","updated_at":"2023-02-11T14:44:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"6a62b801-1df1-438b-8401-a1463aa8848c","html_url":"https://github.com/TonyyCruz/blogs_api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyyCruz%2Fblogs_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyyCruz%2Fblogs_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyyCruz%2Fblogs_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyyCruz%2Fblogs_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TonyyCruz","download_url":"https://codeload.github.com/TonyyCruz/blogs_api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244959452,"owners_count":20538626,"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":["commit-conventions","express","joi","jwt","mysql","mysql2","nodejs","sequelize"],"created_at":"2024-11-28T23:10:45.090Z","updated_at":"2025-12-30T23:48:23.982Z","avatar_url":"https://github.com/TonyyCruz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eProjeto Blogs Api\u003c/h1\u003e\n\u003cp align=\"center\"\u003eNeste projeto, foram desenvolvidos uma API e um banco de dados para a produção de conteúdo para um blog.\u003c/p\u003e\n\n---\n\n\n\u003cbr\u003e\n\n\u003ch3 align=\"center\"\u003eDiagrama DER (Diagrama de Entidade-Relacionamento)\u003c/h3\u003e\n\n\u003cimg src=\"diagramaDB.png\"\u003e\n\n---\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003e📃 Sobre o Projeto\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003eFoi desenvolvida uma aplicação em Node.js usando o pacote sequelize para fazer um CRUD de posts. Os endpoints foram ligados ao banco de dados seguindo os princípios do REST.\n  Para criar posts, o usuario deve estar cadastrado e logad sendo validado por um token gerado atravez do JWT(json web token).\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eRotas utilizáveis\u003c/h2\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eVer rotas\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n  \n  - POST `/user` para cadastrar novo usuario. Utilize um body nesse formato:\n\n```jsx\n{\n  \"displayName\": \"Monkey D. Luffy\",\n  \"email\": \"luffy@pirateking.com\",\n  \"password\": \"estoucomfome\",\n  \"image\": \"https://img.assinaja.com/upl/lojas/mundosinfinitos/imagens/foto-one-piece.png\"\n}\n```\n  \n---\n  \n- POST `/login` para fazer login e receber um token. Utilize um body nesse formato:\n\n```jsx\n{\n  \"email\": \"luffy@pirateking.com\",\n  \"password\": \"estoucomfome\"\n}\n```\n  \n---\n  \n- POST `/post` para criar uma nova postagem. Utilize um body nesse formato:\n\n```jsx\n{\n  \"title\": \"Serei o rei dos piratas\",\n  \"content\": \"Vou encontrar todos os pegaços\",\n  \"categoryIds\": [1]\n}\n```\n\n---\n  \n- POST `/categories` para adicionar uma nova categoria. Utilize um body nesse formato:\n\n```jsx\n{\n  \"name\": \"Animation\"\n}\n```\n\n---\n\n- GET `/user` traz todos os usuarios.\n\n---\n\n- GET `/user/:id` traz o usuário de acordo com o id no banco de dados se ele existir.\n\n---\n\n- GET `/categories` para buscar todas as categorias.\n\n---\n  \n- GET `/post` para trazer todos os blogs post.\n  \n---\n  \n- GET `/post/:id` para trazer o blog post baseado no id do banco de dados se ele existir.\n  \n---\n  \n- GET `/post/search?q=\u003cconteudo da busca\u003e` retornar um array de post que contenham em seu título ou conteúdo o termo passado na URL. Exemplo de url:\n\n```jsx\n  http://localhost:\u003cPORT\u003e/post/search?q=comida\n```\n\n---\n\n- PUT `/post/:id` para atualizar o poste caso ele exista e pertença ao usuario logado. Utilize um body nesse formato:\n\n```jsx\n{\n  \"title\": \"Lufeeeee\",\n  \"content\": \"Cade minha comida\"\n}\n```\n\n---\n\n- PUT `/sales/:id` para atualizar a venda. Utilize um body nesse formato:\n\n```jsx\n  [\n    {\n      \"productId\": 1,\n      \"quantity\":2\n    },\n  ]\n```\n\n---\n  \n- DELETE `/post/:id` deleta um blog post de acordo com o id caso a pessoa seja dona dele.\n  \n---\n  \n- DELETE `/user/me` encontra o usuario logado travez do token de validação e o deleta.\n\n\u003c/details\u003e\n\n\u003cbr\u003e\n\n---\n\n### 🛠 Tecnologias e Bibliotecas utilizadas no desenvolvimento do projeto\n\n- **[Node.js](https://nodejs.org/en/)**\n\n- **[MySQL](https://www.mysql.com/products/workbench/)**\n\n- **[Mysql2](https://www.npmjs.com/package/mysql2)**\n\n- **[Express](http://expressjs.com/pt-br/)**\n\n- **[Nodemon](https://www.npmjs.com/package/nodemon)**\n  \n- **[Sequelize](https://sequelize.org/)**\n  \n- **[JWT](https://jwt.io/introduction)**\n  \n- **[Joi](https://www.npmjs.com/package/joi)**\n\n\n---\n\n### 🚀 Como executar o projeto\n\n_Pré-requisitos_\n\nAntes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:\n- [Git](https://git-scm.com)\n- [Node.js](https://nodejs.org/en/)\n- [Mysql](https://www.mysql.com/) para rodar local ou [Docker](https://docs.docker.com/get-docker/) para rodar em container.\n\nÉ recomendado utilizar algum cliente HTTP, como [Postman](https://www.postman.com/) ou o [Insomnia](https://insomnia.rest/download).\n\nTambém é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/)\n\n---\n\n_Clone o repositorio_\n\n```jsx\ngit clone git@github.com:TonyyCruz/blogs_api.git\n```\n\n---\n\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e:whale: Rodando no Docker\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n  \n  ## Com Docker\n \n \n_Rode o serviço `node` com o comando_\n\n```jsx\n  docker-compose up -d\n```\n\n- Esse serviço irá inicializar dois containers chamados `blogs_api` e outro chamado `blogs_api_db`.\n  - A partir daqui você pode rodar o container via CLI ou abri-lo no VS Code.\n\n_Via CLI use o comando_\n```jsx\ndocker exec -it blogs_api bash\n```\n- Ele te dará acesso ao terminal interativo do container blogs_api(node) criado pelo compose, que está rodando em segundo plano.\n\n_Instale as dependências `dentro do container` com_\n\n```jsx\nnpm install\n```\n\n⚠️Atenção: Caso opte por utilizar o Docker, TODOS os scripts disponíveis no package.json devem ser executados DENTRO do container, ou seja, no terminal que aparece após a execução do comando docker exec.\n  \n  \u003c/details\u003e\n  \n---\n  \n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e:computer: Rodando Localmente\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n \n _Instale as dependências com o comando_\n \n ```jsx\nnpm install\n```\n- Para rodar o projeto desta forma, **obrigatoriamente** você deve ter o `node` instalado em seu computador.\n  - Recomenda-se a versão `^16`\n  \n ⚠️Atenção: Não esqueça de renomear/configurar o arquivo .env.example\n\u003c/details\u003e\n\n---\n\n\n### 💡 Scripts prontos\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eScripts\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n\n  - Criar o banco de dados e gerar as tabelas:\n  ```sh\n    npm run prestart\n  ```\n\n  - Limpar e popular o banco de dados:\n  ```sh\n    npm run seed\n  ```\n\n  - Iniciar o servidor Node:\n  ```sh\n    npm start\n  ```\n\n  - Iniciar o servidor Node com nodemon:\n  ```sh\n    npm run debug\n  ```\n\n  \u003cbr /\u003e\n\u003c/details\u003e\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonyycruz%2Fblogs_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftonyycruz%2Fblogs_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonyycruz%2Fblogs_api/lists"}