Sistema de Gerenciamento de Treinos e Progresso para Personal Trainers desenvolvido em Python com FastAPI.
O Integra Mais é uma API RESTful completa para personal trainers gerenciarem seus alunos, treinos, progressões de carga e pagamentos. O sistema oferece:
- ✅ Gestão completa de alunos e seus dados
- 📊 Histórico de peso e medidas corporais
- 💪 Criação e gerenciamento de treinos e exercícios
- 📈 Progressão automática de cargas (linear e dupla)
- 💳 Controle de planos e pagamentos
- 🔍 Auditoria completa de alterações
- 🔐 Autenticação segura com JWT
- Python 3.9+
- FastAPI - Framework web moderno e de alta performance
- SQLAlchemy - ORM para interação com banco de dados
- Alembic - Gerenciamento de migrações de banco
- Pydantic - Validação de dados
- JWT - Autenticação segura
- PostgreSQL/SQLite - Banco de dados
integra-mais/
├── app/
│ ├── __init__.py
│ ├── main.py # Aplicação FastAPI principal
│ ├── config.py # Configurações
│ ├── database.py # Conexão com banco de dados
│ ├── auth.py # Autenticação e JWT
│ ├── models/ # Modelos SQLAlchemy
│ │ ├── personal.py
│ │ ├── aluno.py
│ │ ├── weight_record.py
│ │ ├── exercise.py
│ │ ├── plano.py
│ │ ├── pagamento.py
│ │ ├── treino.py
│ │ ├── exercicio.py
│ │ ├── regra_progressao.py
│ │ └── audit_log.py
│ ├── schemas/ # Schemas Pydantic
│ │ ├── personal.py
│ │ ├── aluno.py
│ │ ├── weight_record.py
│ │ ├── plano.py
│ │ ├── pagamento.py
│ │ ├── treino.py
│ │ ├── exercicio.py
│ │ └── regra_progressao.py
│ ├── routers/ # Endpoints da API
│ │ ├── auth.py
│ │ ├── alunos.py
│ │ ├── historico_peso.py
│ │ ├── planos.py
│ │ ├── pagamentos.py
│ │ ├── treinos.py
│ │ ├── exercicios.py
│ │ └── progressao.py
│ └── utils/
│ └── audit.py # Utilitários de auditoria
├── alembic/ # Migrações de banco
├── docs/ # Documentação do projeto
├── swagger.yaml # Documentação OpenAPI/Swagger
├── requirements.txt # Dependências Python
├── alembic.ini # Configuração Alembic
├── .env.example # Exemplo de variáveis de ambiente
└── README.md
cd integra-maispython -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windowspip install -r requirements.txtpip install -r requirements.txtCopie o arquivo .env.example para .env e ajuste as configurações:
cp .env.example .envEdite o arquivo .env:
DATABASE_URL=sqlite:///./integra_mais.db
# Para PostgreSQL: postgresql://user:password@localhost:5432/integra_mais
SECRET_KEY=your-secret-key-here-change-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30# Criar tabelas automaticamente (SQLite)
# O FastAPI cria as tabelas na primeira execução
# OU usar Alembic para migrações (recomendado para produção)
alembic revision --autogenerate -m "Initial migration"
alembic upgrade headuvicorn app.main:app --reloadA API estará disponível em: http://localhost:8000
Acesse: http://localhost:8000/docs
Acesse: http://localhost:8000/redoc
O arquivo swagger.yaml contém a especificação completa da API em formato OpenAPI 3.0.
POST /auth/register
Content-Type: application/json
{
"nome": "João Silva",
"email": "joao@personal.com",
"password": "senhaSegura123"
}POST /auth/token
Content-Type: application/x-www-form-urlencoded
username=joao@personal.com&password=senhaSegura123Resposta:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer"
}Inclua o token em todas as requisições protegidas:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...POST /api/alunos
Authorization: Bearer {token}
Content-Type: application/json
{
"nome": "Maria Santos",
"altura_cm": 165,
"idade": 30,
"data_inicio_treino": "2025-10-01",
"frequencia_semana": 4,
"plano_id": "uuid-do-plano",
"plano_data_inicio": "2025-10-01",
"forma_pagamento": "pix"
}POST /api/alunos/{aluno_id}/historico-peso
Authorization: Bearer {token}
Content-Type: application/json
{
"peso_kg": 68.5,
"percentual_gordura": 22.3,
"observacao": "Primeira pesagem do mês"
}POST /api/treinos
Authorization: Bearer {token}
Content-Type: application/json
{
"nome": "Treino A - Peito e Tríceps",
"descricao": "Foco em hipertrofia",
"aluno_id": "uuid-do-aluno"
}POST /api/treinos/{treino_id}/exercicios
Authorization: Bearer {token}
Content-Type: application/json
{
"nome": "Supino Reto",
"series": 4,
"repeticoes": "8-12",
"tempo_descanso_seg": 60,
"observacoes": "Manter cadência controlada"
}Progressão Linear:
PUT /api/alunos/{aluno_id}/exercicios-plano/{exercicio_id}/regra-progressao
Authorization: Bearer {token}
Content-Type: application/json
{
"tipo_progressao": "linear",
"incremento_kg": 2.5,
"observacoes": "Aumentar 2.5kg quando completar todas as repetições"
}Dupla Progressão:
PUT /api/alunos/{aluno_id}/exercicios-plano/{exercicio_id}/regra-progressao
Authorization: Bearer {token}
Content-Type: application/json
{
"tipo_progressao": "dupla",
"incremento_kg": 2.0,
"meta_reps_min": 8,
"meta_reps_max": 12
}- Personal - Personal trainer (usuário do sistema)
- Aluno - Cliente do personal
- WeightRecord - Registro de peso e medidas
- Plano - Planos de pagamento (mensal, trimestral, etc.)
- Pagamento - Pagamentos realizados pelos alunos
- Treino - Treino completo atribuído a um aluno
- Exercicio - Exercício dentro de um treino
- RegraProgressao - Regra de progressão de carga para um exercício
- AuditLog - Registro de auditoria de todas as alterações
Personal (1) ──→ (N) Aluno
Aluno (1) ──→ (N) WeightRecord
Aluno (1) ──→ (N) Treino
Aluno (N) ──→ (1) Plano
Aluno (1) ──→ (N) Pagamento
Treino (1) ──→ (N) Exercicio
Exercicio (1) ──→ (1) RegraProgressao
O sistema suporta dois tipos de progressão:
- Incrementa a carga em um valor fixo (ex: +2.5kg)
- Aplicada quando o aluno completa todas as repetições propostas
- Ideal para exercícios compostos
- Trabalha com uma faixa de repetições (ex: 8-12)
- Quando o aluno atinge o máximo (12 reps), incrementa a carga e volta para o mínimo (8 reps)
- Ideal para exercícios de isolamento
Todas as operações de criação, atualização e exclusão são registradas na tabela audit_log com:
- Tipo de entidade modificada
- ID da entidade
- Ação realizada (create/update/delete)
- Quem executou a ação
- Timestamp
- Valores antigos e novos (JSON)
Para executar os testes (quando implementados):
pytestFROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]DATABASE_URL=postgresql://user:password@db:5432/integra_mais
SECRET_KEY=<generate-a-strong-random-key>
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30- CRUD de alunos
- Histórico de peso
- Gestão de treinos e exercícios
- Planos e pagamentos
- Regras de progressão
- Auditoria
- Notificações por email
- Relatórios em PDF
- Gráficos de evolução
- Exportação de dados (CSV/Excel)
- Dashboard administrativo
- Aplicação mobile
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Integra Mais Team - GitHub
Para suporte, envie um email para support@integramais.com ou abra uma issue no GitHub.
Desenvolvido com ❤️ para Personal Trainers