Utilizaremos o Prisma ORM para gerenciar a base de dados que nesse caso escolhemos o postgresql. A base de dados vai ficar no docker.
Foi implementando seguindo os princípios do SOLID e teste unitário e alguns padrões de projeto.
Para os testes foi escolhido o vitest. Link para o NPM
Significado de cada letra do S.O.L.I.D:
S - O - L - I - D - Depency inversion (Inversão de dependência)
Segue os padrões implementados:
-
Repository Pattern
- O padrão de projeto Factory Method [1] é um dos vinte e três padrões de projeto bem conhecidos que descrevem como resolver problemas recorrentes de projeto para projetar software orientado a objetos flexível e reutilizável, ou seja, objetos que são mais fáceis de implementar, alterar, testar e reutilizar.
-
Factory Pattern
- Faz a mediação entre o domínio e as camadas de mapeamento de dados usando uma interface semelhante a uma coleção para acessar objetos de domínio. É um padrão que utilizamos nos testes para para a repeticção de código ao chamar as instências dos repositórios e etc.
- 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 o seu histórico de check-ins;
- Deve ser possível o usuário buscar academias próximas (até 10km);
- Deve ser possível o usuário buscar academias 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 ser 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 listas de dados precisam estar paginadas com 20 itens por página;
- O usuário deve ser identificado por um JWT (JSON Web Token);
TypeScript e a tipagem
npm i typescript @types/node tsx tsup -D
Instalar o fastfy (servidor web)
npm i fastify
Teste
npm i vitest vite-tsconfig-paths -D
Para mais informações de configuração ir para a sessão Testes
Criar o arquivo tsconfig.json
npx tsc --ini
Mudar o targei para uma versão mais recente do Ecmascript "target": "es2020",
String de conexão com a base de dados:
- PostgreSQL
postgresql://docker:docker@127.0.0.1:5432/gym-anywhere?schema=public
Vamos utilizar o prisma ORM e iniciar com o segiunte comando:
npx prisma init
Depois vamos configurar o seguinte:
-
Instalar a extensão do prisma no VsCode.
-
Ajustar o arqivo settings.json do VSCode para quando salvar um arquivo do tipo prisma, ele tente formatar o arquivo.
"[prisma]": {
"editor.formatOnSave": true
}
- Iniciar o prisma.
npx prisma init
- Gerar o prisma depois de criar as models
npx prisma generate
Usando as configruações da rocketseat
Comando para criar o container.
docker run --name gym-anywhere -e POSTGRESQL_USERNAME=docker -e POSTGRESQL_PASSWORD=docker -e POSTGRESQL_DATABASE=gym-anywhere -p 5432:5432 bitnami/postgresql
Vamos utilizar a biblioteca vite-tsconfig-paths
para configurar o vitest
aceitar as configurações do tsconfig
.
Existe uma parte visual apra visualizar e rodar o teste utlizando a biblioteca di vitest.
O nome da biblioteca é vitest ui