GymPass style app.
- 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;
- 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;
- 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);
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
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.
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
yarn add dayjs
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
- A CLI tool to run multiple npm-scripts in parallel or sequential - npm-run-all Este pacote nos permite exeutar scripts do package.json independente do sistema operacional.
yarn add -D npm-run-all
yarn add -D supertest @types/supertest
yarn add @fastify/cookie