Files
bloodpressure/app/models.py
2026-03-10 19:40:19 +11:00

35 lines
1.6 KiB
Python

from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from app import db
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(255), nullable=False, unique=True)
password_hash = db.Column(db.Text, nullable=False)
profile = db.relationship('Profile', backref='user', uselist=False, lazy='joined')
class Profile(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False, index=True)
name = db.Column(db.String(100))
email = db.Column(db.String(150), unique=True)
profile_pic = db.deferred(db.Column(db.Text)) # Store image as a base64 string, deferred so it doesn't load on every query
systolic_threshold = db.Column(db.Integer, default=140)
diastolic_threshold = db.Column(db.Integer, default=90)
dark_mode = db.Column(db.Boolean, default=False)
timezone = db.Column(db.String(50), default='UTC') # e.g., 'Australia/Sydney'
updated_at = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())
class Reading(db.Model):
__table_args__ = (
db.Index('ix_reading_user_timestamp', 'user_id', 'timestamp'),
)
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
timestamp = db.Column(db.DateTime, nullable=False)
systolic = db.Column(db.Integer, nullable=False)
diastolic = db.Column(db.Integer, nullable=False)
heart_rate = db.Column(db.Integer, nullable=False)
user = db.relationship('User', backref='readings')