38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
"""DailyHealthMetrics SQLAlchemy model."""
|
|
from sqlalchemy import Column, Integer, Date, Float, ForeignKey, UniqueConstraint, String
|
|
from sqlalchemy.orm import relationship
|
|
from backend.database import Base
|
|
|
|
|
|
class DailyHealthMetrics(Base):
|
|
"""Daily health metrics model for tracking health data."""
|
|
__tablename__ = "daily_health_metrics"
|
|
__table_args__ = (
|
|
UniqueConstraint('user_id', 'date', name='uq_user_date'),
|
|
)
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
user_id = Column(Integer, ForeignKey("users.id"))
|
|
date = Column(Date, index=True)
|
|
step_count = Column(Integer, default=0)
|
|
distance_meters = Column(Float, default=0.0)
|
|
calories_burned = Column(Float, default=0.0)
|
|
sleep_duration_minutes = Column(Integer, default=0)
|
|
deep_sleep_minutes = Column(Integer, default=0)
|
|
light_sleep_minutes = Column(Integer, default=0)
|
|
rem_sleep_minutes = Column(Integer, default=0)
|
|
awake_duration_minutes = Column(Integer, default=0)
|
|
avg_heart_rate = Column(Integer, nullable=True)
|
|
min_heart_rate = Column(Integer, nullable=True)
|
|
max_heart_rate = Column(Integer, nullable=True)
|
|
avg_spo2 = Column(Float, nullable=True)
|
|
pai_score = Column(Float, default=0.0)
|
|
weight = Column(Float, nullable=True)
|
|
resting_heart_rate = Column(Integer, nullable=True)
|
|
hrv = Column(Float, nullable=True)
|
|
|
|
# Data provenance tracking
|
|
data_source = Column(String(50), default="health_connect") # "health_connect", "manual"
|
|
|
|
user = relationship("User", back_populates="health_metrics")
|