31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
from ..models import Base
|
|
|
|
class SegmentEffort(Base):
|
|
__tablename__ = "segment_efforts"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
segment_id = Column(Integer, ForeignKey("segments.id"), nullable=False)
|
|
activity_id = Column(Integer, ForeignKey("activities.id"), nullable=False)
|
|
|
|
elapsed_time = Column(Integer, nullable=False) # seconds
|
|
start_time = Column(DateTime, nullable=False) # Absolute start time of the effort
|
|
end_time = Column(DateTime, nullable=False)
|
|
|
|
avg_power = Column(Integer, nullable=True)
|
|
max_power = Column(Integer, nullable=True)
|
|
avg_hr = Column(Integer, nullable=True)
|
|
avg_speed = Column(Float, nullable=True) # m/s
|
|
avg_cadence = Column(Integer, nullable=True) # rpm
|
|
avg_respiration_rate = Column(Float, nullable=True) # breaths/min
|
|
|
|
# Potential for ranking (1 = KOM/PR, etc.) - calculated dynamically or stored
|
|
kom_rank = Column(Integer, nullable=True)
|
|
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
segment = relationship("Segment")
|
|
activity = relationship("Activity")
|