Skip to content

Plataforma para criação e gerenciamento de treinos, exercícios e registros de academia, com métricas, histórico, perfil e autenticação segura.

Notifications You must be signed in to change notification settings

YuriLRodrigues/workout-tracker-api

Repository files navigation

🏋️‍♂️ Workout Tracker - Plataforma de Gestão de Treinos Pessoais

O Workout Tracker é um projeto em desenvolvimento com o objetivo de facilitar a vida de quem treina, permitindo criar, editar, deletar e registrar logs de treinos e exercícios de academia, além de oferecer diversas funcionalidades voltadas ao acompanhamento da evolução física e da rotina de treinos.

Com base em conceitos modernos como Arquitetura Limpa, princípios SOLID e Inversão de Dependência, o projeto visa ser escalável, modular e altamente testável, pronto para receber evoluções como personal trainers, grupos de amigos, estatísticas gráficas, notificações, login social e integração com serviços de pagamento.


🚀 Funcionalidades Atuais

  • 🔐 Autenticação (login, troca e recuperação de senha via email)
  • 🧑 Perfil do usuário (avatar, informações pessoais e físicas)
  • 🏋️ Criação e gerenciamento de treinos
  • 💪 Criação e vinculação de exercícios aos treinos
  • 📝 Registro de execução de exercícios (logs)
  • 📊 Dashboard com métricas médias semanais do treino
  • 📚 Histórico completo de logs paginado
  • 📧 Recuperação de senha com token por email
  • 🖼️ Upload de imagem de perfil via MinIO

🛠️ Tecnologias Utilizadas

Tecnologia Descrição
NestJS NestJS — Framework modular e escalável para Node.js
Express Express — Utilizado internamente pelo NestJS
PostgreSQL PostgreSQL — Banco de dados relacional
Prisma Prisma ORM — ORM moderno e tipado para banco de dados
MinIO MinIO — Armazenamento de imagens (simulação do S3)
Nodemailer Nodemailer — Envio de e-mails (como recuperação de senha)
Passport JWT Passport + JWT — Autenticação com tokens
Zod class-validator Zod & class-validator — Validações fortes com feedback
Swagger Swagger — Documentação automática da API
Multer Multer — Upload de arquivos
TypeScript TypeScript — Tipagem estática e robustez
dayjs date-fns Dayjs / date-fns — Manipulação de datas
ESLint Prettier ESLint + Prettier — Padrões de código e formatação
pnpm pnpm — Gerenciador de pacotes rápido e eficiente

📁 Estrutura de Pastas

A estrutura é baseada em Arquitetura Limpa, com separação clara de responsabilidades entre domínio, infraestrutura e aplicação:

src/
├── core/ # Lógica essencial compartilhada (ex: DTOs, helpers, erros globais)
├── domain/ # Domínio da aplicação
│ ├── application/ # Casos de uso, interfaces e lógica de negócio
│ │ ├── cryptography/ # Abstrações de criptografia (hash, JWT)
│ │ ├── errors/ # Erros de negócio
│ │ ├── repositories/ # Interfaces dos repositórios
│ │ ├── use-cases/ # Casos de uso (Application Services)
│ ├── enterprise/ # Camada do domínio puro
│ │ ├── entities/ # Entidades (User, Workout, Exercise, Log, etc.)
│ │ ├── types/ # Tipagens utilitárias
│ │ ├── value-object/ # Value Objects (ex: Email, Password, etc.)
├── infra/ # Implementações concretas
│ ├── auth/ # Estratégias de autenticação (JWT, guards, interceptors)
│ ├── cryptography/ # Hashing, JWT, etc.
│ ├── database/ # Prisma Client e conexão com PostgreSQL
│ ├── env/ # Configuração de variáveis de ambiente
│ ├── guards/ # Guards personalizados para rotas
│ ├── http/ # Controllers, rotas e DTOs da camada HTTP
│ ├── mailer/ # Envio de emails com Nodemailer
│ ├── storage/ # Uploads de arquivos com MinIO
├── utils/ # Funções auxiliares e helpers
├── app.module.ts # Módulo principal da aplicação
├── main.ts # Ponto de entrada da aplicação

🔮 Funcionalidades Futuras

  • 📝 FAQ para dúvidas
  • 💳 Integração com meios de pagamento para planos futuros (ex: Stripe)
  • 🤝 Relacionamento de usuário com personal trainer
  • 👥 Criação de grupos de amigos
  • 📈 Estatísticas gráficas de desempenho por período
  • 🔔 Notificações (lembrete de treino)
  • 🔑 Login com Google, GitHub, etc.
  • 🧠 Recomendação inteligente de treinos (IA)

⚙️ Instalação

pnpm install

🛠️ Desenvolvimento

pnpm start:dev

🚨 Produção

pnpm start:prod

📦 Migrations com Prisma

pnpm prisma generate
pnpm prisma migrate dev

🔑 Variáveis de Ambiente

Crie um arquivo .env na raiz com os seguintes valores:

SERVICE=""
PORT=""
VERSION=""

DATABASE_URL=""
FRONTEND_URLS=""
APP_URL_WORKOUT_TRACKER=""

MINIO_BUCKET_NAME=""
MINIO_BUCKET_URL=""
MINIO_ACCESS_KEY_ID=""
MINIO_SECRET_ACCESS_KEY=""

JWT_PRIVATE_KEY=""
JWT_PUBLIC_KEY=""

NODE_MAILER_PORT=""
NODE_MAILER_HOST=""
NODE_MAILER_FROM=""
NODE_MAILER_USER=""
NODE_MAILER_PASSWORD=""

📬 Envio de Emails

Funcionalidades disponíveis:

Envio de token para recuperação de senha

Recuperação de senha com token válido

⚠️ Para funcionar corretamente, configure as variáveis do Nodemailer com uma conta válida.

🖼️ Upload de Imagens

Utiliza o MinIO para simular o Amazon S3, permitindo:

  • Upload seguro de imagem de perfil

  • Acesso posterior aos arquivos de forma segura

📬 Contato

About

Plataforma para criação e gerenciamento de treinos, exercícios e registros de academia, com métricas, histórico, perfil e autenticação segura.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages