Projeto do módulo 3 do curso de Nodejs da Rocktseat (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
- deve ser possível o usuário buscar academias pelo nome
- deve ser possível o usuário realizar chack-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 valido 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 persistido em um banco PostgreSQL
- todas as listas de dados precisam estar paginadas com 20 itens por página
- o usuário deve ser identificado por um JWT
- Javascript
- Typescript
- NodeJS
- NPM
- Git
- Editor Config
- Dotenv
- Zod
- Eslint
- Prisma ORM
- Docker
- Bcrypt
- Vitest
- Design de Software
- Engenharia de Requisitos
- Variáveis de ambiente
- Validação de variáveis via schema validation
- Padrão de lint de codificação
- Aliases de importação
- Object Relational Mapping
- Migrations
- Containerização com Docker
- Docker hub
- Docker compose
- Criptografia Hashing
- Primary key e Foregein key
- Relacionamentos entre tabelas
- Estruturando com controllers e services
- Criptografia e hash para senha
- S.O.L.I.D.
- Repository pattern
- Handler de erros globais
- Testes Unitários
- In Memory Test Database
- Coverage Report
- UI view para os testes
- Aplicando (SUT - system under test) como um modelo para maior produtividade na implementação dos testes
- Factory Pattern
-
adicionado o arquivo
.gitignore
-
adicionado o arquivo
.editorconfig
-
projeto iniciado com o comando
git init
-
repositório do projeto disponibilizado em: https://github.com/thiagosf-dev/api-rest-nodejs-solid
-
projeto criado com o comando:
npm init
-
instalação com o comando:
npm i -D typescript @types/node tsx tsup
-
criado o arquivo
tsconfig.json
com o comando:npx tsc --init
-
configurado o arquivo
tsconfig.json
para alias import:"baseUrl": "./", "paths": { "@/*": [ "./src/*" ] },
-
instalado com o comando:
npm i fastify
-
criado na raíz do projeto o arquivo
.npmrc
com a seguinte configuração:save-exact=true
-
criado o arquivo
.env
e o.env.example
com a seguinte configuração:NODE_ENV=dev
-
instalado Dotenv com o comando:
npm i dotenv
-
instalado com o comando:
npm i zod
-
instalado o ESLint com o comando:
npm i -D eslint @rocketseat/eslint-config
-
criado na raíz do projeto o arquivo de configuração do ESLint:
.eslintrc.json
-
configurado o
.eslintrc.json
:{ "extends": [ "@rocketseat/eslint-config/node" ] }
-
criado script para rodar o ESlint e fazer o fix: `"eslint:fix": "eslint --ext .js,.ts src --fix"````
-
criado o arquivo
.eslintignore
-
instalado com o comando:
npm i -D prisma
-
iniciado o Prisma com o comando:
npx prisma init
-
instalada a extensão do
vscode
para o Prisma:prisma.io
-
ajustado o arquivo
.vscode/settings.json
:{ "editor.formatOnSave": true, "editor.codeActionsOnSave": { "sourse.fixAll.eslint": true, "source.organizeImports": false }, "files.eol": "\n", "[javascript]": { "editor.formatOnSave": false, "editor.codeActionsOnSave": { "source.fixAll.eslint": true } }, "[prisma]": { "editor.formatOnSave": true }, "[typescript]": { "editor.formatOnSave": false, "editor.codeActionsOnSave": { "source.fixAll.eslint": true } }, }
-
criada a tipagem automatizada do model com o comando:
npx prisma generate
-
instalada dependência para manipular o banco de dados com o comando:
npm i @prisma/client
-
rodando as migrations com o comando:
npx prisma migrate dev
-
rodando o Prisma Studio com o comando:
npx prisma studio
-
instalado docker desktop
-
versão do docker informada no comando:
docker -v
-
imagem do Postgres da Bitname excutada com o comando:
docker run --name api-solid-pg -e POSTGRESQL_USERNAME=docker -e POSTGRESQL_PASSWORD=docker -e POSTGRESQL_DATABASE=apisolidpg -p 5432:5432 bitnami/postgres
-
listando todos os containers que estão em execução:
docker ps
-
listando todos os containers já criados:
docker ps -a
-
subindo o container:
docker start api-solid-pg
-
parando o container:
docker stop api-solid-pg
-
removendo o container:
docker rm api-solid-pg
-
visualizando os logs d container:
docker logs api-solid-pg
-
criado na raíz do projeto o arquivo
docker-compose.yml
-
subindo container com o docker compose:
docker compose up -d
-
parando container com o docker compose:
docker compose stop
-
removendo container com o docker compose:
docker compose down
-
instaldo com o comando:
npm i bcryptjs
npm i -D @types/bcryptjs
-
instalação do Vitest:
npm i -D vitest vite-tsconfig-paths
-
criado na raíz do projeto o arquivo
vite.config.ts
-
criado no
package.json
o script:"test": "vitest run", "test:w": "vitest"
-
instalada a lib de coverage
@vitest/coverage-v8
após executar o seguinte script adicionado nopackage.json
"test:c": "vitest run --coverage"
com o comando:
npm run test:c
-
instalada a UI do vitest com o comando:
npm i -D @vitest/ui
-
criado no
package.json
o script para executar a UI:"test:ui": "vitest --ui"
com o comando:
npm run test:ui
-
em uma pasta de sua preferência, faça o clone do projeto com o comando:
git clone https://github.com/thiagosf-dev/api-rest-nodejs-solid.git
-
abra a pasta criada após o comando acima, e digite o comando:
npm install