Skip to content

pmdpaula/rs-ignite-nodejs2023-03-api-solid

Repository files navigation

API SOLID com Fastify - Rocketseat - Ignite 2023 - Projeto 03

Aplicação

GymPass style app.

RFs (Requisitos funcionais)

  • deve ser possível se cadastrar;
  • deve ser possível se autenticar;
  • deve ser possível obter o perfil de um usuário logado;
  • deve ser possível obter o número de check-ins realizados pelo usuário logado;
  • deve ser possível o usuário obter seu histórico de check-ins;
  • deve ser possível o usuário buscar academias próximas (até 10 km);
  • deve ser possível o usuário buscar academais pelo nome;
  • deve ser possível o usuário realizar check-in em uma academia;
  • deve ser possível validar o check-in de um usuário;
  • deve ser possível cadastrar uma academia;

RNs (Regras de negócio)

  • o usuário não deve poder se cadastrar com um e-mail duplicado;
  • o usuário não pode fazer 2 check-ins no mesmo dia;
  • o usuário não pode fazer check-in se não estiver perto (100m) da academia;
  • o check-in só pode ser validado até 20 minutos após criado;
  • o check-in só pode ser validado por administradores;
  • a academia só pode ser cadastrada por administradores;

RNFs (Requisitos não-funcionais)

  • a senha do usuário precisa estar criptografada;
  • os dados da aplicação precisam estar persistidos em um banco PostgreSQL;
  • todas as listas de dados precisam estar paginadas com 20 itens por página;
  • o usuário deve ser identificado com um JWT (JSON Web Token);

Configuração

Criar o arquivo .npmrc com o conteúdo a seguir para que os pacotes sejam instalados com a versão exata, oou seja, sem que seja possível atualizações indesejadas.

save-exact=true
  • Adição do typescript
yarn add -D typescript @types/node tsx tsup

npx tsc --init

O segundo comando vai criar o arquivo tsconfig.json e podemos alterar a configuração do parâmetro target para es2020.

Com o tsx foi adicionado a linha a seguir nos scripts do package.json

"start": "tsx watch src/main.ts",
  • Lint e organização do código
yarn add -D eslint prettier eslint-config-prettier

Ordenar as importações - eslint-plugin-import

yarn add -D eslint-plugin-import @typescript-eslint/parser eslint-import-resolver-typescript eslint-import-resolver-babel-module eslint-plugin-module-resolver @typescript-eslint/eslint-plugin

ver configurações necessárias do eslint-import-resolver-typescript para funcionar correto com o path mapping

Ordenar as importações - @trivago/prettier-plugin-sort-imports

yarn add -D @trivago/prettier-plugin-sort-imports

Este plugin pede para que coloque a ordenação que queremos no arquivo .prettierrc.json e ficaram estas opções.

  "importOrder": [
    "^react$",
    "^react-native$",
    "^@react-navigation$",
    "^@storage/(.*)$",
    "^@screens/(.*)$",
    "^@components/(.*)$",
    "^@assets/(.*)$",
    "^[./]"
  ],
  "importOrderSeparation": true,
  "importOrderSortSpecifiers": true
yarn add -D babel-plugin-module-resolver

Instalações

Pacote da API

yarn add fastify

Variáveis de ambiente - dotenv

yarn add dotenv

Será usado o arquivo env/index.ts para fazer as validações das variáveis de ambiente.

Validação de dados - zod

yarn add zod
yarn add -D prisma

Inicia a configuração do prisma

npx prisma init

Após a configuração modelo de dados, rodar o comando a seguir para gerar os códigos para manipular os modelos no banco.

npx prisma generate

-- Este comando também vai instalar o pacote @prisma/client que é o que vai ser usado para manipular os dados no banco. Instalaria o prisma se já não tivesse instalado.

Usaremos a imagem da Bitnami por causa de configurações de segurança pré definidas. Uso do docker-compose para facilitar a configuração do banco.

docker-compose up -d

Com o banco disponível, podemos rodar o comando a seguir para criar as tabelas no banco.

npx prisma migrate dev
yarn add bcryptjs
yarn add -D @types/bcryptjs

-Validação de datas - dayjs

yarn add dayjs

Testes

yarn add -D vitest vite-tsconfig-paths @vitest/coverage-v8

O pacote vite-tsconfig-paths é para que o vitest entenda os path mapping do tsconfig.json e não dê erro de importação. O último pacote instalado é para que o vitest gere o relatório de cobertura de testes. Vai gerar um relatório em html na pasta coverage.

vitest run --coverage

Podemos visualizar os testes de forma mais visual podemos instalar o pacote vitest-ui e rodar o comando a seguir.

yarn add -D @vitest/ui

E adicionamos mais um script no package.json para rodar o comando a seguir.

"test:ui": "vitest --ui [--api 9527]"

Obs.: coloquei a opção --api 9527 pois havia algum conflito com a porta padrão.

yarn add @fastify/jwt
yarn add -D npm-run-all
yarn add -D supertest @types/supertest
yarn add @fastify/cookie

About

API nodejs - Rockeseat - Ignite - 2023 - Projeto 03 - fastify

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages