{"id":22226403,"url":"https://github.com/trkotovicz/blogs-api","last_synced_at":"2026-04-11T03:32:33.468Z","repository":{"id":155118810,"uuid":"525585681","full_name":"trkotovicz/blogs-api","owner":"trkotovicz","description":"O Blogs API é uma ma API REST para a produção de conteúdo de um blog, onde você pode fazer um CRUD de posts, categorias e usuários.","archived":false,"fork":false,"pushed_at":"2022-09-15T16:19:12.000Z","size":571,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-13T16:33:56.667Z","etag":null,"topics":["api","api-rest","docker","express","javascript","joi","jwt-authentication","msc-project","mysql","nodejs","sequelize-orm"],"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/trkotovicz.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-17T00:30:12.000Z","updated_at":"2022-11-01T22:51:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"55618629-40ea-413e-bb9b-37a4ad8cd467","html_url":"https://github.com/trkotovicz/blogs-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/trkotovicz/blogs-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fblogs-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fblogs-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fblogs-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fblogs-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trkotovicz","download_url":"https://codeload.github.com/trkotovicz/blogs-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fblogs-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31668046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"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":["api","api-rest","docker","express","javascript","joi","jwt-authentication","msc-project","mysql","nodejs","sequelize-orm"],"created_at":"2024-12-03T00:28:28.446Z","updated_at":"2026-04-11T03:32:33.446Z","avatar_url":"https://github.com/trkotovicz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blogs API\n\nO Blogs API é uma ma API REST e um banco de dados para a produção de conteúdo para um blog, onde você pode fazer requisições HTTP para criar, consultar, atualizar e deletar posts, categorias e usuários de um blog. Tem autenticação de usuário, com JWT (Json Web Token), e você só pode alterar um post que você mesmo criou.\u003c/br\u003e\nEle foi desenvolvido em JS, utilizando o banco de dados MySQL, com Express e o ORM Sequelize. Utiliza a arquitetura de camadas MSC (**M**odell-**S**ervice-**C**ontroller).\u003c/br\u003e\n\n## Inicialização via Docker 🐳\n\n1. Clone o repositório `git@github.com:trkotovicz/blogs-api.git`\n2. Na raíz do repositório rode o comando `docker-compose up -d`\n3. Entre o terminal do container criado `docker exec -it blogs_api bash`\n4. Instale as dependências do projeto com `npm install`\n5. Inicie a aplicação dentro do container `npm start`\n\u003c/br\u003e\nO servidor vai estar rodando na porta local 3000 (http://localhost:3000).\u003c/br\u003e\nUtilize o cliente de requisições HTTP de sua preferência para fazer as requisições.\n\n\n# Rotas\n\n⚠️ Alguns endpoints vão precisar de uma autenticação prévia, para que seja possível consumir o endpoint.\u003c/br\u003e\nSeu token vai ser gerado com a ferramenta JWT ao realizar o login ou cadastrar um novo usuário.\n\n\n### POST `/login`\n\nO endpoint recebe no corpo da requisição os campos `email` e `password` e retorna um token aleatório de 16 caracteres.\u003c/br\u003e\nA requisição deve ter o body com um email e uma senha válidos. Exemplo:\n```json\n  {\n    \"email\": \"usuario@email.com\",\n    \"password\": \"123456\",\n  }\n  ```\n`http://localhost:3000/login`\n\n---\n\n### POST `/user`\n\nNessa rota o usuário pode cadastrar um novo usuário. A requisição valida o login através do token gerado.\u003c/br\u003e\nO corpo da requisição deve ter o seguinte formato:\n```json\n  {\n    \"displayName\": \"Bruce Wayne\",\n    \"email\": \"bruce@wayneenterprises.com\",\n    \"password\": \"batman\"\n    \"image\": \"https://cdn.icon-icons.com/icons2/1736/PNG/512/4043232-avatar-batman-comics-hero_113278.png\"\n  }\n ```\n`http://localhost:3000/user`\n\n---\n\n## ⚠️ Autenticação de usuário\n\nAs rotas abaixo irão utilizar o token de validação gerado no login.\u003c/br\u003e\nPara isso, adicione o token de autenticação no `Headers` do seu cliente de requisições, na chave `Authorization`.\u003c/br\u003e\n\n---\n\n### GET `/user`\n\nEssa rota lista todos os usuários cadastrados.\u003c/br\u003e\n\n`http://localhost:3000/user`\n\u003c/br\u003e\n\n---\n\n### GET `/user/:id`\n\nEssa rota exibe um usuário com base no id do endpoint.\u003c/br\u003e\nPara isso, substitua no endpoint o `:id` pelo id de usuário que você deseja buscar (o id deve ser um número inteiro).\n\n`http://localhost:3000/user/:id`\n\u003c/br\u003e\n\n---\n\n### GET `/categories`\n\nEssa rota exibe a lista de categorias cadastradas.\u003c/br\u003e\n\n`http://localhost:3000/categories`\n\u003c/br\u003e\n\n---\n\n### DELETE `/user/me`\n\nNessa rota o usuário pode deletar sua conta.\u003c/br\u003e\nÉ verificado através do token o usuário logado e então ele é excluído da base de dados.\n\n`http://localhost:3000/user/me`\n\n---\n\n### POST `/categories`\n\nNessa rota o usuário pode cadastrar uma nova categoria de post.\u003c/br\u003e\nO corpo da requisição deve ter o seguinte formato:\n```json\n  {\n    \"name\": \"Nova categoria\"\n  }\n  ```\n`http://localhost:3000/user`\n\n---\n\n### GET `/post`\n\nEssa rota exibe todos os posts do blog.\u003c/br\u003e\n\n`http://localhost:3000/post`\n\u003c/br\u003e\n\n---\n\n### GET `/post/:id`\n\nEssa rota exibe um um post com base no id do endpoint.\u003c/br\u003e\nPara isso, substitua no endpoint o `:id` pelo id do post que você deseja buscar (o id deve ser um número inteiro).\n\n`http://localhost:3000/post/:id`\n\u003c/br\u003e\n\n---\n\n### POST `/post`\n\nO endpoint permite o usuário criar um novo post.\u003c/br\u003e\nO corpo da requisição deve ter um título, o conteúdo do post e os ids das categorias do post. Exemplo:\n```json\n  {\n\t  \"title\": \"Novo post no blog\",\n\t  \"content\": \"Um conteúdo bem legal aqui\",\n\t  \"categoryIds\": [1]\n  }\n```\n`http://localhost:3000/post`\n\n---\n\n### PUT `/post/:id`\n\nNessa rota o usuário pode alterar um post publicado por ele.\u003c/br\u003e\nÉ verificado se o usuário autor do post é o mesmo usuário logado, caso seja, o post é alterado com sucesso.\u003c/br\u003e\nPara isso, substitua no endpoint o `:id` pelo id do post que você deseja alterar (o id deve ser um número inteiro).\n\n`http://localhost:3000/post/:id`\n\n---\n\n### DELETE `/post/:id`\n\nNessa rota o usuário pode excluir uma publicação feita por ele.\u003c/br\u003e\nÉ verificado se o usuário autor do post é o mesmo usuário logado, caso seja, o post é excluído com sucesso.\u003c/br\u003e\nPara isso, substitua no endpoint o `:id` pelo id do post que você deseja alterar (o id deve ser um número inteiro).\n\n`http://localhost:3000/post/:id`\n\n---\n\n### GET `/post/search`\n\nEssa rota é reponsável por buscar posts através de palavras chaves ou frases.\u003c/br\u003e\nPara isso, adicione uma chave com o valor `q` no campo `Query` do seu cliente de requisições HTTP, em seguida adicione o valor que você deseja buscar nos posts.\u003c/br\u003e\nCaso nenhum valor seja passado, ele retornará todos os posts do blog.\n\n`http://localhost:3000/post/search`\n\n---\n\nProjeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).\n\u003c/br\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fblogs-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrkotovicz%2Fblogs-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fblogs-api/lists"}