Add matched training signals, daily recovery and performance analysis
This commit is contained in:
@@ -16,9 +16,11 @@ class User(UserMixin, db.Model):
|
||||
# Assigned only by local setup / operator CLI. Never accepted from registration input.
|
||||
local_account_key = db.Column(db.String(64), unique=True)
|
||||
created_at = db.Column(db.DateTime(timezone=True), default=lambda: datetime.now(UTC))
|
||||
hr_bands = db.Column(db.JSON)
|
||||
activities = db.relationship(
|
||||
"Activity", backref="owner", lazy="select", cascade="all, delete-orphan"
|
||||
)
|
||||
daily_health = db.relationship("DailyHealth", cascade="all, delete-orphan")
|
||||
|
||||
def set_password(self, password):
|
||||
self.password_hash = generate_password_hash(password)
|
||||
@@ -38,6 +40,9 @@ class GarminConnection(db.Model):
|
||||
last_success = db.Column(db.DateTime(timezone=True))
|
||||
message = db.Column(db.String(200), nullable=False, default="Sync queued.")
|
||||
failures = db.Column(db.Integer, nullable=False, default=0)
|
||||
health_enabled = db.Column(db.Boolean, nullable=False, default=False, server_default=db.false())
|
||||
health_message = db.Column(db.String(200), nullable=False, default="Daily recovery sync is off.",
|
||||
server_default="Daily recovery sync is off.")
|
||||
|
||||
|
||||
class Activity(db.Model):
|
||||
@@ -51,6 +56,7 @@ class Activity(db.Model):
|
||||
duration_s = db.Column(db.Float, nullable=False, default=0)
|
||||
elevation_m = db.Column(db.Float, nullable=False, default=0)
|
||||
avg_hr = db.Column(db.Float)
|
||||
session_context = db.Column(db.JSON, nullable=False, default=dict, server_default="{}")
|
||||
metrics = db.Column(db.JSON, nullable=False, default=dict, server_default="{}")
|
||||
visibility = db.Column(db.String(12), nullable=False, default="private")
|
||||
share_token = db.Column(db.String(64), unique=True)
|
||||
@@ -123,6 +129,16 @@ class SavedAnalysis(db.Model):
|
||||
)
|
||||
|
||||
|
||||
class DailyHealth(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
owner_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False, index=True)
|
||||
day = db.Column(db.Date, nullable=False)
|
||||
values = db.Column(db.JSON, nullable=False, default=dict)
|
||||
fetched_at = db.Column(db.DateTime(timezone=True), nullable=False,
|
||||
default=lambda: datetime.now(UTC))
|
||||
__table_args__ = (db.UniqueConstraint("owner_id", "day"),)
|
||||
|
||||
|
||||
class Friendship(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
low_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
|
||||
|
||||
Reference in New Issue
Block a user