- Esse projeto foi feito a partir do 2º módulo do curso de Formação Node.js da Rocketseat.
Transactions.API.Formacao.NodeJS.mp4
-
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.
-
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.
-
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.
-
Além disso, abordamos as formas de conexões com banco de dados que podemos utilizar como:
- Drives Nativos
- Query Builders
- ORMs
-
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.
-
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.
-
Tecnologias principais:
-
Fastify:
- 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.
- Além disso, ele naturalmente entende o TypeScript e lida muito bem com assincronismo do JavaScript.
-
Knex:
- Realiza a conexão com Banco de dado e nos permite escrever queries SQL de forma mais simples e mais próxima do JavaScript.
- Conexão feita com SQLite para desenvolvimento e Postgres para produção/deploy.
-
Bancos de dados
- SQLite:
- 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.
- Postgres:
- Banco de dados utilizado para produção/deploy, muito robusto e escalável, além de ser um banco de dados relacional.
- SQLite:
-
Render:
- Publicarmos nossa API na plataforma Render, 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.
-
- Criamos um servidor HTTP com o Fastify;
- Configuramos o Knex no projeto para conexão com o banco de dados SQLite e Postgres;
- Criamos as estruturas dos Bancos por maio das Migrations com o Knex.
- Com a instância do Fastify, criamos rotas para manipulação das transações em conjunto com plugins, com os seguintes métodos:
GET - /transactions
=> Listagem de todas transações.GET - /transactions/:id
=> Busca da transação pelo id.GET - /transactions/balance
=> Cálculo do saldo do usuário.POST - /transactions
=> Criação de uma nova transação recebendo title, amount e type no corpo da requisição, e adicionando os camposid
,created_at
esession_id
.DELETE - /transactions/:id
=> Remoção de uma transação de acordo com o id enviado via route params.DELETE - /transactions/
=> Exclusão de todas transações.
- 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.
- 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.
- 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.
- 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". - Realizamos testes End to End em todas as rotas por meio do Vitest e Supertest, garantindo que todas as rotas estão funcionando corretamente.
- NodeJS
- PostgreSQL
-
O projeto foi desenvolvido utilizando as seguintes tecnologias:
-
Clonar o projeto:
git clone https://github.com/Aszurar/dtmoney-back.git
-
É necessário ter o Node.js instalado na máquina assim como todas tecnologias/dependências citadas acima.
pnpm i
- Lembre-se de configurar a .env(variáveis de ambiente) antes de rodar o projeto
- Lembre-se de executar as migrations antes de rodar o projeto
pnpm knex -- migrate:latest
-
Caso tudo tenha sido instalado com sucesso, basta executar na raiz do projeto:
pnpm dev
-
Após isso, basta realizar requisições de acordo com as rotas definidas no arquivo
src/routes.js
utilizando o Insomnia, Postman ou via terminal com httpie
Desenvolvido por 🌟 Lucas de Lima Martins de Souza.