38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
"""UserExerciseProgram model for per-user exercise programming.
|
|
|
|
Links a user to an exercise with week 1 and week 4 rep/weight targets.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
|
|
class UserExerciseProgram(SQLModel, table=True):
|
|
"""Per-user programming for a specific exercise.
|
|
|
|
Attributes:
|
|
id: Primary key, auto-incremented.
|
|
user_id: FK to users table.
|
|
exercise_id: FK to exercises table.
|
|
wk1_reps: Week 1 target reps (string to support "30 sec" style).
|
|
wk4_reps: Week 4 target reps.
|
|
wk1_weight: Week 1 target weight (e.g., "30 lbs", "BW").
|
|
wk4_weight: Week 4 target weight.
|
|
created_at: Timestamp when the record was created.
|
|
updated_at: Timestamp of the last update.
|
|
"""
|
|
|
|
__tablename__ = "user_exercise_programs"
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
user_id: int = Field(foreign_key="users.id", index=True)
|
|
exercise_id: int = Field(foreign_key="exercises.id", index=True)
|
|
wk1_reps: str = Field(default="")
|
|
wk4_reps: str = Field(default="")
|
|
wk1_weight: str = Field(default="")
|
|
wk4_weight: str = Field(default="")
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow)
|