{"id":18867310,"url":"https://github.com/daviteixeira-dev/application-to-manage-notes","last_synced_at":"2026-04-12T12:44:56.194Z","repository":{"id":232404853,"uuid":"784000909","full_name":"daviteixeira-dev/application-to-manage-notes","owner":"daviteixeira-dev","description":"A complete Backend using Node.js and Express for a note management application, capable of handling requests made by clients, processing these requests and then returning responses to those who requested them.","archived":false,"fork":false,"pushed_at":"2024-05-06T01:06:19.000Z","size":1824,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-09-17T17:26:57.838Z","etag":null,"topics":["api","backend","bcryptjs","express","express-async-errors","javascript","knex","nodejs","nodemon","sqlite","sqlite3"],"latest_commit_sha":null,"homepage":"https://rocketnotes-api-d0g2.onrender.com","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/daviteixeira-dev.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-04-09T01:43:47.000Z","updated_at":"2024-05-06T14:35:31.000Z","dependencies_parsed_at":"2024-04-15T03:25:31.714Z","dependency_job_id":"cc6b90b2-97b3-4ff0-85e8-f9064fba85bb","html_url":"https://github.com/daviteixeira-dev/application-to-manage-notes","commit_stats":null,"previous_names":["daviteixeira-btm/application-to-manage-notes","daviteixeira-dev/application-to-manage-notes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daviteixeira-dev%2Fapplication-to-manage-notes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daviteixeira-dev%2Fapplication-to-manage-notes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daviteixeira-dev%2Fapplication-to-manage-notes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daviteixeira-dev%2Fapplication-to-manage-notes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daviteixeira-dev","download_url":"https://codeload.github.com/daviteixeira-dev/application-to-manage-notes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239816478,"owners_count":19701753,"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","backend","bcryptjs","express","express-async-errors","javascript","knex","nodejs","nodemon","sqlite","sqlite3"],"created_at":"2024-11-08T05:09:01.581Z","updated_at":"2026-02-13T11:30:17.437Z","avatar_url":"https://github.com/daviteixeira-dev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e Application to Manage Notes \u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#Introducao\"\u003e 🧩 Introdução \u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#Dependencias\"\u003e 🧪 Dependências\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#Aplicacao\"\u003e 🚀 Aplicação\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#Licensa\"\u003e 📝 License\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003c/p\u003e\n\n\u003ca id=\"Introducao\"\u003e\u003c/a\u003e\n## 🧩 Introdução\n\n### Um Backend completo utilizando Node.js e Express para uma aplicação de gerenciamento de anotações. A API foi construida com o banco de dados \u003ca href=\"https://www.sqlite.org/\"\u003eSQLite\u003c/a\u003e, e para a manipulação do nosso Banco de Dados foi utilizado a ferramenta \u003ca href=\"https://www.beekeeperstudio.io/\"\u003eBeekeeper Studio\u003c/a\u003e juntamente com o Query Builder \u003ca href=\"https://knexjs.org/\"\u003eKnex.js\u003c/a\u003e. Para cadastrar nossas rotas e verificar os status codes das mesmas foi utilizado o \u003ca href=\"https://insomnia.rest/\"\u003eInsomnia\u003c/a\u003e. \n\n### A aplicação deve ser capaz de lidar com requisições, feitas pelos clientes, conseguir processar essas requisições e então devolver respostas para quem as solicitou.\n\n\u003ca id=\"Dependencias\"\u003e\u003c/a\u003e\n## 🧪 Dependencias\n\u003e Requisitos para rotar o código.\n\n- [JavaScript](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript)\n- [Node.js](https://nodejs.org/en)\n- [Express](https://expressjs.com/pt-br/)\n- [Express Async Erros](https://www.npmjs.com/package/express-async-errors)\n- [Nodemom](https://nodemon.io/)\n- [Bcryptjs](https://www.npmjs.com/package/bcryptjs)\n- [Knex](https://knexjs.org/)\n\n\u003ca id=\"Aplicacao\"\u003e\u003c/a\u003e\n## 🚀 Aplicação\n\n### Instalação e inicialização do projeto\n\n### ```COMANDOS```\n\n#### Para instalar as dependências\n```\n npm install\n```\n\n#### Para rodar o projeto\n```\n npm run dev\n```\n\n### Em um novo terminal, use esse comando para rodar as migrations\n```\n  npm run migrate\n```\n\n### ```Estrutura do Banco de Dados```\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/estrutura-banco-de-dados.png\" /\u003e\n\u003c/div\u003e\n\n### ```Query Builder```\n\nOs bancos de dados relacionais utilizam o mesmo padrão de linguagem de consulta que é o SQL, porém é natural que de um banco de dados para outro, mesmo que sendo relacional, tenha algumas diferenças. Então, a gente preciso adotar uma estratégia para gerar códigos SQL de forma independente do banco. E é aí que entra a Query Builder.\n\nUm Querr Builder é um construtor de consulta que permite gerar instruções SQL de maneira independente do banco de dados que for utilizando.\n\nO que a Query Builder faz é gerar o código SQL para o banco de dados utilizado. Ao invés de escrever o código SQL específico para o banco, é escrito utilizando a síntese do Query Builder. A vantagem é que, caso seja necessario fazer um select, um insert, um update, utilizamos o Query Builder para gerar o código SQL para o banco de dados.\n\nOutra vantagem é que o Query Builder vai gerar um código performático, deixando as consultas bem estruturadas para o banco de dados utilizado. Nesse projeto utilizamos o Query Builder \u003ca href=\"https://knexjs.org/\"/\u003eKnex.js\u003c/a\u003e.\n\n### ```Migrations```\n\nAs migrations são uma forma de versionar o nosso banco de dados, elas trabalham na manipulação da base de dados, seja alterando, criando ou removendo informações.\n\nPara criar uma migration, usamos o camando:\n\n```\n npx knex migrate:make nome_da_migration\n```\n\nPara executar a migration, para criar ela dentro do banco de dados, usamos o comando:\n\n```\n npx knex migrate:latest\n```\n\nPorém, temos um script expecifico para isso, basta executar:\n\n```\n npm run migrate\n```\n\n### ```Insomnia```\n\nNo Insomnia crie uma 'Request Collection' e a chame de RocketNotes.\n\nPara criar uma requisição, clique no botão com o símbolo de '+' no canto superior a esquerda e escolha a opção 'HTTP Request', depois você pode renomear a requisição para qual ação você for utilizar, como por exemplo: 'User Create', em seguida, troque o método para o tipo da ação que você deseja realizar, como por exemplo: 'POST' e digite o endereço que a aplicação está rodando. Depois, abaixo na opção 'Body' escolha o formato 'JSON' para poder enviar informações no corpo da requisição. Para executar, clique no botão 'Send'.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/create-request-insomnia.png\" /\u003e\n\u003c/div\u003e\n\nTambém é possivel organizar as rotas em pastas e configurar variáveis se ambiente no Insomnia. Para criar uma variável de ambiente, clique na opção de 'No Environment' e clique na opção 'Manage Environments'. Apois isso clique no botão de '+' e clicar em 'Environment' para adicionar um novo, onde podemos por exemplo criar o ambiente de 'dev' de desenvolvimento. Nesse ambiente podemos definir a nossa 'BASE_URL', podendo acessa-la em qualquer lugar.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/variavel-de-ambiente.png\" /\u003e\n\u003c/div\u003e\n\nDepois podemos usar ele, selecionando na opção de 'No Environment' e atualizando o endereço da API para a variavel de ambiente.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/variavel-de-ambiente-2.png\" /\u003e\n\u003c/div\u003e\n\nPodemos transformar os recursos em variaveis, podendo chama-los em lugares expecíficos, como por exemplo, clicar na pasta de users com o botão direito e escolher a opção de 'Environment', onde podemos chamar ela de 'RESOURCE':\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/variavel-de-ambiente-3.png\" /\u003e\n\u003c/div\u003e\n\nA variável de ambiente que é criada dentro de uma pasta só é disponivel para a mesma.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/variavel-de-ambiente-4.png\" /\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n### ```Para testar as funcionalidades no Insomnia```\n\nPara testar a criação de um usuário. Crie uma pasta \u003cb\u003eUsers\u003c/b\u003e, faça uma requisição do tipo \u003cb\u003e'POST'\u003c/b\u003e chamada \u003cb\u003e'Create'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/users\u003c/b\u003e e escolha o \u003cb\u003e'JSON'\u003c/b\u003e como corpo da requisição. Desta forma você pode criar um usuário, como no exemplo abaixo:\n\n```\n{\n\t\"name\": \"Davi\",\n\t\"email\": \"davi@email.com\",\n\t\"password\": \"123\"\n}\n```\n\nPara testar a atualização de um usuário, na pasta \u003cb\u003eUsers\u003c/b\u003e, faça uma requisição do tipo \u003cb\u003e'PUT'\u003c/b\u003e chamada \u003cb\u003e'Update'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/users/1\u003c/b\u003e e escolha o \u003cb\u003e'JSON'\u003c/b\u003e como corpo da requisição. Desta forma você pode atualizar o usuário (atualize o id de acordo com o user), como no exemplo abaixo:\n\n```\n{\n\t\"name\": \"Davi Teixeira\",\n\t\"email\": \"davi@email.com\",\n\t\"password\": \"1234\",\n\t\"old_password\": \"123\"\n}\n```\n\nPara testar a criação de uma nota de usuário. Crie uma pasta \u003cb\u003eNotes\u003c/b\u003e, faça uma requisição do tipo \u003cb\u003e'POST'\u003c/b\u003e chamada \u003cb\u003e'Create'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/notes/1\u003c/b\u003e e escolha o \u003cb\u003e'JSON'\u003c/b\u003e como corpo da requisição. Desta forma você pode criar uma nota para o usuário com id = 1, como no exemplo abaixo:\n\n```\n{\n\t\"title\":\"Introdução Nodejs.\",\n\t\"description\": \"Essa é uma nota de exemplo.\",\n\t\"tags\": [\"node\", \"express\"],\n\t\"links\": [\"link1\", \"link2\"]\n}\n```\n\nPara testar a rota que exibe todas as notas de um usuário, faça uma requisição do tipo \u003cb\u003e'GET'\u003c/b\u003e chamada \u003cb\u003e'Index'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/notes/\u003c/b\u003e e nas query params adicione os valores de id, title e tags. Como no exemplo abaixo:\n\n```\nhttp://localhost:3333/notes?title=node\u0026user_id=1\u0026tags=node\n```\n\nPara testar a funcionalidade que mostra uma nota expecifica, na pasta \u003cb\u003eNotes\u003cb/\u003e, faça uma requisição do tipo \u003cb\u003e'GET'\u003c/b\u003e chamada \u003c/b\u003e'Show'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/notes/1\u003c/b\u003e. Desta forma você pode ver a nota do usuário 1 (atualize o id de acordo com o user).\n\nPara testar a funcionalidade de deletar uma nota, na pasta \u003cb\u003eNotes\u003c/b\u003e, faça uma requisição do tipo \u003cb\u003e'DELETE'\u003c/b\u003e chamada \u003cb\u003e'Delete'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/notes/1\u003c/b\u003e. Desta forma você deleta as notas do usuário 1 (atualize o id de acordo com o user).\n\nPara testar a funcionalidade que mostra as tags da nota de um usuário, crie uma pasta \u003cb\u003eTags\u003c/b\u003e, faça uma requisição do tipo \u003cb\u003e'GET'\u003c/b\u003e chamada \u003cb\u003e'Index'\u003c/b\u003e, com a url: \u003cb\u003elocalhost:3333/tags/1\u003c/b\u003e. Desta forma você pode ver as tags do usuário 1 (atualize o id de acordo com o user).\n\n\u003ca id=\"Licensa\"\u003e\u003c/a\u003e\n## 📝 License\n\nEste projeto possui uma Licença MIT License - veja o arquivo [LICENSE](./LICENSE) para mais detalhes.\n\n\u003cdiv align=\"center\"\u003e\n  Made with ❤️ by Davi Teixeira\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaviteixeira-dev%2Fapplication-to-manage-notes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaviteixeira-dev%2Fapplication-to-manage-notes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaviteixeira-dev%2Fapplication-to-manage-notes/lists"}