Gym Pass

O Gym Pass é uma API HTTP Rest do Node.js construída com Typescript, Fastify, Prisma, PostgreSQL, JWT e outras tecnologias. Ele permite o gerenciamento do sistema de academias, incluindo cadastro e autenticação do usuário, permissões, criação e pesquisa de academias e criação de check-in, histórico, métricas e validação.

Back End
NodeJs
TypeScript
Fastify
Prisma
Zod
Vitest
Supertest

Carregando ...

O Gym Pass é uma API HTTP Rest do Node.js construída com Typescript, Fastify, Prisma, PostgreSQL, JWT e outras tecnologias. Ele permite o gerenciamento do sistema de academias, incluindo cadastro e autenticação do usuário, permissões, criação e pesquisa de academias e criação de check-in, histórico, métricas e validação.

O aplicativo é totalmente testado com testes unitários e de ponta a ponta usando Vitest e Supertest e segue os princípios SOLID.

Requisitos funcionais

Deve ser possível registar-se
Deve ser possível 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 ao utilizador obter o seu histórico de check-in
Deverá ser possível ao usuário pesquisar academias próximas (até 10km)
Deverá ser possível ao utilizador pesquisar os ginásios pelo nome
Deverá ser possível ao utente fazer check-in num ginásio
Deve ser possível validar o check-in de um utilizador
Deverá ser possível inscrever um ginásio

Regras de negócio

Os usuários não devem conseguir se registrar com um e-mail duplicado
Os usuários não podem fazer 2 check-ins no mesmo dia
Os utentes não podem fazer o check-in se não estiverem perto (100m) do ginásio
Check-ins só podem ser validados até 20 minutos após a sua criação
Os check-ins só podem ser validados pelos administradores
Academias só podem ser cadastradas por administradores

Requisitos não Funcionais

A senha do usuário precisa ser criptografada
Os dados do aplicativo precisam ser mantidos em um banco de dados PostgreSQL
Todas as listas de dados precisam ser paginadas com 20 itens por página
Os usuários devem ser identificados por um JSON Web Token (JWT)

Rotas

Método HTTPEndpointDescrição
POST/usersCria um novo usuário
POST/sessionsAutentica um usuário
GET/meRetorna o usuário logado atualmente
POST/gymsCria uma nova academia
GET/gyms/searchRetorna uma lista de academias com base na consulta de pesquisa e número da página
GET/gyms/nearbyRetorna uma lista de academias próximas à localização fornecida
POST/gyms/:gymId/check-insCria um novo check-in
PATCH/check-ins/:checkInId/validateMarca o check-in fornecido como validado
GET/check-ins/historyRetorna uma lista dos check-ins do usuário
GET/check-ins/metricsRetorna as métricas de check-in do usuário

Tecnologias

Algumas tecnologias utilizadas para construção da aplicação.

Rodar o servidor

Clone o repositório

git clone https://github.com/manoguii/gym-pass.git

Para rodar o projeto localmente

  • Crie um arquivo .env na raiz do projeto e preencha as variáveis ambiente, o exemplo de como deve ficar esta em .env.example.

Instale as dependências

npm install

Crie o banco de dados local

docker-compose up -d

Rodar as migrations

npx prisma migrate dev

Iniciar servidor

npm run start:dev

Rodar testes unitários

npm run test

Rodar testes E2E

npm run test:e2e

Made with 💙 by Guilherme David