Início Profile Projeto
Avatar de

Livio Lopes de Alvarenga

API REST em Node.js de transações financeiras

  • NodeJs
  • TypeScript
  • JavaScript
  • .ENV
  • Fastify
  • Insomnia
  • Knex
  • Zod
  • SQLite
  • Postgresql
  • Vitest
  • EsLint
  • Prettier

API REST em Node.js de transações financeiras

SobreVitrine DevTecnologiasInstalaçõesFuncionalidadesAutorLicença

 

💻 Sobre o projeto

🚀 API Rest em Node.js de transações financeiras.

 

issue site API-Rest-Node-Transactions total amount of programming languages used in the project most used language in the projects repository size

deploy badge

 


 

📺 Vitrine Dev

🪧 Vitrine.Dev
Nome API REST em Node.js de transações financeiras
🏷️ Tecnologias NodeJs, TypeScript, JavaScript, .ENV, Fastify, Insomnia, Knex, Zod, SQLite, Postgresql, Vitest, EsLint, Prettier
🚀 URL https://api-rest-node-transactions.onrender.com

 

🛠 Tecnologias

As seguintes ferramentas foram usadas na construção do projeto

 

Node.js badge TypeScript badge JavaScript badge Fastify badge Dotenv badge KnexJs badge ZOD badge SQLite badge Postgresql badge Vitest Badge Insomnia badge vscode download code formatter prettier code standardization eslint


 

⚙️ Instalações

Criando projeto NodeJs

# Criando projeto NodeJs com o npm init -y (-y para não precisar responder as perguntas)
npm init -y

# Adicionando o type module para o NodeJs reconhecer o import/export em vez do require do CommonJS
# Adicionar no arquivo package.json no campo "type"
"type": "module",
// Adicionar no arquivo package.json no campo "scripts"
"scripts": {
  "dev": "tsx watch src/server.ts", // start server
  "knex": "node --no-warnings --loader tsx ./node_modules/knex/bin/cli.js", // knex
  "test": "vitest", // test
  "build": "tsup src", // compile typescript project to js to build production
  "prod": "node build/server.js" // start server in production
},

Instalando dependências

npm install -D typescript # Instalando o TypeScript em modo de desenvolvimento
npx tsc --init # Inicializando o TypeScript
npm install -D @types/node # Instalando o @types/node para o TypeScript reconhecer os métodos do NodeJs
npm install -D tsx # Instalando o tsx para compilar o TypeScript em tempo real *usar somente em ambiente de desenvolvimento!
"target": "es2020", // Alterando o target do TypeScript para o ES2020 em tsconfig.json
npm install fastify # Instalando o Fastify
npm install @fastify/cookie # Instalando o @fastify/cookie para usar cookies no Fastify
npm install knex # Instalando o Knex para usar o banco de dados
npm install -D sqlite3 # Instalando o sqlite3 para o banco de dados SQLite3
npm install pg # Instalando o pg para o banco de dados PostgreSQL
npm install dotenv # Instalando o dotenv para usar variáveis de ambiente no NodeJs
# Criar arquivo .env na raiz do projeto e adicionar as variáveis de ambiente e o arquivo env.example para exemplificar as variáveis. Obs.: Não adicionar o .env no gitignore
npm install zod # Instalando o zod para validar os dados de entrada
npm install -D vitest # Instalando o vitest para testes unitários
npm install -D supertest # Instalando o supertest para testes de integração
npm install -D @types/supertest # Instalando o @types/supertest para o TypeScript reconhecer os métodos do supertest
npm install -D tsup # Instalando o tsup para compilar o TypeScript em modo de produção

Configurando ESlint

# Instalando Eslint
npm init @eslint/config

# √ How would you like to use ESLint? · style
# √ What type of modules does your project use? · esm
# √ Which framework does your project use? · none
# √ Does your project use TypeScript? · Yes
# √ Where does your code run? · browser
# √ How would you like to define a style for your project? · prompt
# √ What format do you want your config file to be in? · JSON
# √ What style of indentation do you use? · 2
# √ What quotes do you use for strings? · double
# √ What line endings do you use? · windows
# √ Do you require semicolons? · Yes

# Adicionar em ident a opção { "SwitchCase": 1 }, para corrigir erro de edentação em switchCase
"indent": ["error", 2, { "SwitchCase": 1 }],

# Adicionar ignorePatterns "*.config.cjs" para ignorar os arquivos de configuração. Ou adicione no top dos arquivos /* eslint-env node */, pois Node é o ambiente real durante a compilação.
"ignorePatterns": ["*.config.cjs"]

Configurando knex.js

// Criar arquivo knexfile.js na raiz do projeto e adicionar o código abaixo
import { configKnex } from "./src/database";

export default configKnex;
// Obs: em database.ts adicionar export default configKnex;

// Adicionar no arquivo database.ts onde deve ser salvo as migrations
migrations: {
  extension: "ts",
  directory: "./db/migrations",
}

// Adicionar em package.json no campo "scripts"
"knex": "node --no-warnings --loader tsx ./node_modules/knex/bin/cli.js"
// Obs: --no-warnings --loader tsx para o knex.js reconhecer o TypeScript

npm run knex -- migrate:make create-transactions
// Comando usado para criar migrates (npm run knex -- migrate:make + nome da migrate)

npm run knex -- migrate:latest
// Comando usado para rodar as migrates (npm run knex -- migrate:latest)

npm run knex -- migrate:rollback
// Comando usado para desfazer as migrates (npm run knex -- migrate:rollback)

 


 

⚙️ Funcionalidades

RF - Requisitos Funcionais

  • Usuário deve poder criar novas transações;
  • Usuário deve poder listar todas as transações que ja foram criadas;
  • Usuário deve poder obter um resumo da conta, com o total de entradas, saídas e o total de crédito;
  • Usuário deve poder visualizar uma transação específica;

RN - Regras de Negócio

  • A transação deve ser do tipo entrada (crédito) ou saída (débito);
  • Deve ser possível identificar o usuário que criou as transações, (Obs: Não é necessário autenticação);

RNF - Requisitos Não Funcionais

  • Testes e2e de todas as rotas em Vitest;
  • Uso de sqlite em ambiente Dev e PostgreSQL em ambiente Prod;
  • Uso de Knex.js para migrations e queries;
  • Uso de Fastify.js para rotas e middlewares;
  • Uso de Zod.js para validação de dados de entrada;
  • Uso de Supertest.js para testes de integração;
  • Uso de Tsup.js para compilar o TypeScript em modo de produção;
  • Uso de Eslint para padronização de código;
  • Uso de Prettier para padronização de código;

 

🧭 Rodando a aplicação web (Modo desenvolvimento)

# Clone este repositório
git clone https://github.com/livioalvarenga/API-Rest-Node-Transactions.git
# Acesse a pasta do projeto no seu terminal/cmd
cd API-Rest-Node-Transactions
# Instale as dependências
npm install
# Execute a aplicação em modo de desenvolvimento
npm run dev
# A aplicação será aberta na porta:3333 - acesse http://localhost:3333

Testando requests com Insomnia

npm run dev # start server
# Escolha a variável dev (vermelho) em Insomnia

# Para testar a API com deploy no render use a variável prod (verde) em Insomnia

Importar o arquivo Insomnia.json no Insomnia para testar as requests

Insomnia

 


 

🦸 Autor

Olá, eu sou Livio Alvarenga, Engenheiro de Produção | Dev Back-end e Front-end. Sou aficcionado por tecnologia, programação, processos e planejamento. Uni todas essas paixões em uma só profissão. Dúvidas, sugestões e críticas são super bem vindas. Seguem meus contatos.

 

portifólio livio alvarenga perfil linkedin livio alvarenga perfil twitter livio alvarenga perfil instagram livio alvarenga perfil facebook livio alvarenga perfil youtube livio alvarenga

perfil vitrinedev livio alvarenga


 

📝 Licença

Este projeto é MIT licensed.

#CompartilheConhecimento