{"id":25188349,"url":"https://github.com/aszurar/dtmoney-back","last_synced_at":"2026-04-15T10:32:27.869Z","repository":{"id":275229625,"uuid":"894068280","full_name":"Aszurar/dtmoney-back","owner":"Aszurar","description":"O objetivo desse projeto é começarmos a usar micro-frameworks para criação de APIs Rest, e entendermos como podemos aplicar os conceitos básicos de APIs com essas ferramentas.","archived":false,"fork":false,"pushed_at":"2025-03-17T15:45:55.000Z","size":289,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T09:45:54.558Z","etag":null,"topics":["fastify","javascript","knex","knexjs","node","nodejs","postgres","postgresql","sqlite","sqlite3","typescript"],"latest_commit_sha":null,"homepage":"https://dtmoney-back.onrender.com","language":"TypeScript","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/Aszurar.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-11-25T17:36:56.000Z","updated_at":"2025-03-17T15:45:59.000Z","dependencies_parsed_at":"2025-03-05T18:24:37.495Z","dependency_job_id":"7854b332-c490-4160-a8cf-ffea623a6a28","html_url":"https://github.com/Aszurar/dtmoney-back","commit_stats":null,"previous_names":["aszurar/dtmoney-back"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Aszurar/dtmoney-back","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2Fdtmoney-back","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2Fdtmoney-back/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2Fdtmoney-back/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2Fdtmoney-back/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aszurar","download_url":"https://codeload.github.com/Aszurar/dtmoney-back/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aszurar%2Fdtmoney-back/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31837165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T10:26:52.245Z","status":"ssl_error","status_checked_at":"2026-04-15T10:26:51.649Z","response_time":63,"last_error":"SSL_read: 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":["fastify","javascript","knex","knexjs","node","nodejs","postgres","postgresql","sqlite","sqlite3","typescript"],"created_at":"2025-02-09T20:19:56.754Z","updated_at":"2026-04-15T10:32:27.848Z","avatar_url":"https://github.com/Aszurar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# #03 - Node\n\n## Rotas e HTTP\n\n- Esse projeto foi feito a partir do 2º módulo do curso de Formação Node.js da Rocketseat.\n\n\u003cdiv align=\"center\"\u003e\n\n[![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge\u0026logo=node.js\u0026logoColor=white)](https://nodejs.org/pt) [![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/) [![Fastify](https://img.shields.io/badge/fastify-%23000000.svg?style=for-the-badge\u0026logo=fastify\u0026logoColor=white)](https://fastify.dev/) [![Render](https://img.shields.io/badge/Render-%46E3B7.svg?style=for-the-badge\u0026logo=render\u0026logoColor=white)](https://render.com/) [![Insomnia](https://img.shields.io/badge/Insomnia-black?style=for-the-badge\u0026logo=insomnia\u0026logoColor=5849BE)](https://insomnia.rest/)\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n        \u003ch2\u003e\n          \u003ca href=\"#information_source-sobre\"\u003eSobre\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#dizzy-funcionalidades\"\u003eFuncionalidades\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#seedling-requisitos-mínimos\"\u003eRequisitos\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#rocket-tecnologias-utilizadas\"\u003eTecnologias\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n          \u003ca href=\"#package-como-baixar-e-executar-o-projeto\"\u003eBaixar e Executar\u003c/a\u003e\u0026nbsp;\n        \u003c/h2\u003e\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\" \u003e\n\n\nhttps://github.com/user-attachments/assets/465d7143-6778-464f-8201-08019b67a470\n\n\n**[Vídeo no Youtube](https://www.youtube.com/watch?v=znaEYHAKSW4)**\n\n\u003c/div\u003e\n\n---\n\n## :information_source: Sobre\n\n- Esse é o 2º projeto do curso Formação Node.js da Rocketseat, onde devemos criar uma API simples de criação, atualização e remoção de transações financeiras.\n- O objetivo desse projeto é começarmos a usar **micro-frameworks para criação de APIs Rest**, e entendermos como podemos aplicar os conceitos básicos de APIs com essas ferramentas.\n- Assim, nesse projeto usamos o **Fastify em conjunto com o knex para conexão com um banco de dados SQLite**, criamos rotas para manipulação de transações financeiras com persistência de dados e realizamos o deploy da aplicação.\n- Além disso, abordamos as formas de conexões com banco de dados que podemos utilizar como:\n  1. Drives Nativos\n  2. Query Builders\n  3. ORMs\n- Acabamos por escolher o **Query Builder Knex**, é o Query builder mais famoso do ambiente NodeJS, permite **escrever queries SQL de forma mais simples e mais próxima do JavaScript**, sendo uma porta de entrada fácil para lidar com conexão com Banco de dados, além de ser uma ferramenta que nos permite mudar de banco de dados sem muita complexidade, e com isso, usamos o SQLite para desenvolvimento e o Postgres para o ambiente de produção/deploy.\n- Por fim, nesse projeto, também abordamos **testes End to End com o auxílio do Vitest e Supertest**, para testarmos todas nossas rotas e garantirmos que elas estão funcionando corretamente.\n  \n- Tecnologias principais:\n   1. Fastify:\n       - Ferramenta que **auxilia**  na **criação de rotas**, não **vai opinar sobre qual banco de dados usar**, qual **template engine usar**, ou **qual estrutura de pastas vamos usar**, etc. Ele é focado em ser totalmente **flexível** e em **facilitar** a criação de rotas para uma API Rest.\n       - Além disso, ele naturalmente entende o TypeScript e lida muito bem com assincronismo do JavaScript.\n\n   2. Knex:\n      - Realiza a **conexão** com **Banco de dado** e nos permite escrever queries SQL de forma mais **simples** e mais **próxima** do JavaScript.\n      - Conexão feita com **SQLite** para desenvolvimento e **Postgres** para produção/deploy.\n\n   3. Bancos de dados\n      1. SQLite:\n         - Banco de dados utilizado para **desenvolvimento**, muito simples e fácil de se lidar para pequenos projetos, além de **simular** um banco de dados **relacional**.\n      2. Postgres:\n         - Banco de dados utilizado para **produção**/**deploy**, muito robusto e escalável, além de ser um **banco de dados relacional**.\n\n   4. Render:\n        - Publicarmos nossa API na plataforma **[Render](https://render.com/)**, que é uma plataforma de deploy que nos permite publicar aplicações de forma **simples** e **rápida**, além de ser **gratuita** para **pequenos projetos**.\n  \n---\n\n## :dizzy: Funcionalidades\n\n  1. Criamos um servidor HTTP com o **Fastify**;\n  2. Configuramos o Knex no projeto para conexão com o banco de dados SQLite e Postgres;\n  3. Criamos as estruturas dos Bancos por maio das Migrations com o Knex.\n  4. Com a instância do Fastify, criamos rotas para manipulação das transações em conjunto com plugins, com os seguintes métodos:\n     1. **```GET - /transactions```** =\u003e Listagem de todas transações.\n     2. **```GET - /transactions/:id```** =\u003e Busca da transação pelo id.\n     3. **```GET - /transactions/balance```** =\u003e Cálculo do saldo do usuário.\n     4. **```POST - /transactions```** =\u003e Criação de uma nova transação recebendo **title**, **amount** e **type** no corpo da requisição, e adicionando os campos **```id```**, **```created_at```** e **```session_id```**.\n     5. **```DELETE - /transactions/:id```** =\u003e Remoção de uma transação de acordo com o id enviado via route params.\n     6. **```DELETE - /transactions/```** =\u003e Exclusão de **todas** transações.\n  5. Todas as transações acima, **realizam suas ações de acordo com o session_id**, que é um **identificador único para cada sessão**, simulando um usuário logado que vai estar aplicado nos Cookies das requisições.\n     1. Caso o usuário **não** tenha um **session_id**, ele é criado **automaticamente com a requisição de cadastrar uma nova transação**, e já é aplicado nos Cookies para as próximas requisições.\n  6. Em todas transações que **dependem de algum parâmetro** seja pelo **corpo** ou **route params**, temos **validações feitas pelo ZOD**, para garantir que os dados estão sendo enviados corretamente.\n  7. Além disso, criamos um **middleware** para **validar** o **```session_id```** em todas rotas, garantindo **acessar** os dados de acordo com o \"usuário logado\".\n  8. Realizamos testes End to End em todas as rotas por meio do Vitest e Supertest, garantindo que todas as rotas estão funcionando corretamente.\n\n---\n\n## :seedling: Requisitos Mínimos\n\n  1. NodeJS\n  2. PostgreSQL\n\n---\n\n## :rocket: Tecnologias Utilizadas\n\n- O projeto foi desenvolvido utilizando as seguintes tecnologias:\n\n  1. **[dotenv](https://www.npmjs.com/package/dotenv)**\n  2. **[Fastify](https://fastify.dev/)**\n  3. **[Knex](http://knexjs.org/)**\n  4. **[NodeJS](https://nodejs.org/pt)**\n  5. **[Postgres](https://www.postgresql.org/)**\n  6. **[SQLite](https://www.sqlite.org/index.html)**\n  7. **[Supertest](https://www.npmjs.com/package/supertest)**\n  8. **[tsx](https://www.npmjs.com/package/tsx)**\n  9. **[tsup](https://tsup.egoist.dev)**\n  10. **[TypeScript](https://www.typescriptlang.org/)**\n  11. **[Vitest](https://www.npmjs.com/package/vitest)**\n  12. **[Zod](https://zod.dev/)**\n\n---\n\n## :package: Como baixar e executar o projeto\n\n### Baixar\n\n- Clonar o projeto:\n\n  ```bash\n   git clone https://github.com/Aszurar/dtmoney-back.git\n  ```\n\n- É necessário ter o Node.js instalado na máquina assim como todas **tecnologias**/**dependências** citadas acima.\n  - [Instalação do NodeJS](https://nodejs.org/en/)\n\n### Instalação das dependências\n\n```bash\n  pnpm i\n```\n\n### Variáveis de ambiente\n\n- Lembre-se de configurar a .env(**variáveis de ambiente**) antes de rodar o projeto\n\n### Execução das migrations\n\n- Lembre-se de executar as migrations antes de rodar o projeto\n\n```bash\n pnpm knex -- migrate:latest\n```\n\n### Execução\n\n- Caso tudo tenha sido instalado com sucesso, basta executar na raiz do projeto:\n\n  ```bash\n    pnpm dev\n  ```\n\n- Após isso, basta realizar requisições de acordo com as rotas definidas no arquivo `src/routes.js` utilizando o **[Insomnia](https://insomnia.rest/)**, **[Postman](https://www.postman.com/)** ou via terminal com **[httpie](https://httpie.io/)**\n\n\u003cdiv align=\"center\"\u003e\n\nDesenvolvido por :star2: Lucas de Lima Martins de Souza.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faszurar%2Fdtmoney-back","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faszurar%2Fdtmoney-back","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faszurar%2Fdtmoney-back/lists"}