Skip to content

gbrogio/integra-mais-python

Repository files navigation

Integra Mais API

Sistema de Gerenciamento de Treinos e Progresso para Personal Trainers desenvolvido em Python com FastAPI.

📋 Visão Geral

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

🛠 Tecnologias

  • 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

📁 Estrutura do Projeto

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

🚀 Instalação e Configuração

1. Clone o repositório

cd integra-mais

2. Crie um ambiente virtual

python -m venv venv
source venv/bin/activate  # Linux/Mac
# ou
venv\Scripts\activate  # Windows

3. Instale as dependências

pip install -r requirements.txtpip install -r requirements.txt

4. Configure as variáveis de ambiente

Copie o arquivo .env.example para .env e ajuste as configurações:

cp .env.example .env

Edite 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

5. Inicialize o banco de dados

# 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 head

6. Execute a aplicação

uvicorn app.main:app --reload

A API estará disponível em: http://localhost:8000

📚 Documentação da API

Swagger UI (Interativa)

Acesse: http://localhost:8000/docs

ReDoc

Acesse: http://localhost:8000/redoc

OpenAPI YAML

O arquivo swagger.yaml contém a especificação completa da API em formato OpenAPI 3.0.

🔐 Autenticação

1. Registrar um Personal

POST /auth/register
Content-Type: application/json

{
  "nome": "João Silva",
  "email": "joao@personal.com",
  "password": "senhaSegura123"
}

2. Fazer Login

POST /auth/token
Content-Type: application/x-www-form-urlencoded

username=joao@personal.com&password=senhaSegura123

Resposta:

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer"
}

3. Usar o Token

Inclua o token em todas as requisições protegidas:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

📖 Exemplos de Uso

Criar um Aluno

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"
}

Registrar Peso

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"
}

Criar um Treino

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"
}

Adicionar Exercício ao Treino

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"
}

Configurar Progressão de Carga

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
}

🗄 Modelo de Dados

Principais Entidades

  • 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

Relacionamentos

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

🔄 Progressão de Carga

O sistema suporta dois tipos de progressão:

1. Progressão Linear

  • 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

2. Dupla Progressão

  • 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

📊 Auditoria

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)

🧪 Testes

Para executar os testes (quando implementados):

pytest

🚢 Deployment

Usando Docker (recomendado)

FROM 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"]

Variáveis de Ambiente para Produção

DATABASE_URL=postgresql://user:password@db:5432/integra_mais
SECRET_KEY=<generate-a-strong-random-key>
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30

📝 Roadmap

  • 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

🤝 Contribuindo

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

👥 Autores

📞 Suporte

Para suporte, envie um email para support@integramais.com ou abra uma issue no GitHub.


Desenvolvido com ❤️ para Personal Trainers

About

Integra+ Empoderando ONGs & Empreendedores informais através de soluções de integração com Python para um futuro cada vez mais prático, competitivo e integrado.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors