51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from sqlalchemy import Column, Integer, String, Float, Text, ForeignKey
|
|
|
|
from app.models.base import Base
|
|
|
|
|
|
class Phase(Base):
|
|
__tablename__ = "phases"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String(100), nullable=False)
|
|
description = Column(Text)
|
|
start_date = Column(String(20))
|
|
end_date = Column(String(20))
|
|
notes = Column(Text)
|
|
|
|
|
|
class Workout(Base):
|
|
__tablename__ = "workouts"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
|
|
phase_id = Column(Integer, ForeignKey("phases.id"))
|
|
name = Column(String(200), nullable=False)
|
|
date = Column(String(20), nullable=False)
|
|
notes = Column(Text)
|
|
status = Column(String(20), default="plan") # plan, complete
|
|
|
|
|
|
class WorkoutSet(Base):
|
|
__tablename__ = "workout_sets"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
workout_id = Column(Integer, ForeignKey("workouts.id"), nullable=False)
|
|
exercise = Column(String(100), nullable=False)
|
|
set_number = Column(Integer)
|
|
reps = Column(Integer)
|
|
weight = Column(Float)
|
|
rpe = Column(Float)
|
|
notes = Column(Text)
|
|
|
|
|
|
class WorkoutSnapshot(Base):
|
|
__tablename__ = "workout_snapshots"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
workout_id = Column(Integer, ForeignKey("workouts.id"), nullable=False)
|
|
changed_by = Column(String(50))
|
|
reason = Column(Text)
|
|
sets_snapshot = Column(Text) # JSON array
|
|
created_at = Column(String(20))
|