added segments
This commit is contained in:
@@ -12,4 +12,6 @@ from .sync_log import SyncLog
|
||||
from .activity_state import GarminActivityState
|
||||
from .health_state import HealthSyncState
|
||||
from .scheduled_job import ScheduledJob
|
||||
from .bike_setup import BikeSetup
|
||||
from .bike_setup import BikeSetup
|
||||
from .segment import Segment
|
||||
from .segment_effort import SegmentEffort
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
23
FitnessSync/backend/src/models/segment.py
Normal file
23
FitnessSync/backend/src/models/segment.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from sqlalchemy import Column, Integer, String, Float, Text, DateTime, JSON
|
||||
from sqlalchemy.sql import func
|
||||
from ..models import Base
|
||||
|
||||
class Segment(Base):
|
||||
__tablename__ = "segments"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
name = Column(String, nullable=False)
|
||||
description = Column(String, nullable=True)
|
||||
distance = Column(Float, nullable=False) # in meters
|
||||
avg_grade = Column(Float, nullable=True) # %. e.g. 5.5
|
||||
elevation_gain = Column(Float, nullable=True) # meters
|
||||
|
||||
# Store simplified geometry as List[[lon, lat]] or similar
|
||||
points = Column(JSON, nullable=False)
|
||||
|
||||
# Bounding box for fast filtering: [min_lat, min_lon, max_lat, max_lon]
|
||||
bounds = Column(JSON, nullable=False)
|
||||
|
||||
activity_type = Column(String, nullable=False) # 'cycling', 'running'
|
||||
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
26
FitnessSync/backend/src/models/segment_effort.py
Normal file
26
FitnessSync/backend/src/models/segment_effort.py
Normal file
@@ -0,0 +1,26 @@
|
||||
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)
|
||||
avg_hr = Column(Integer, nullable=True)
|
||||
|
||||
# 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")
|
||||
Reference in New Issue
Block a user