BREATHE / backend /models /user.py
tannuiscoding's picture
added user and assessment files
5121000
from datetime import datetime
from .. import db
from werkzeug.security import generate_password_hash, check_password_hash
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(256), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
# Profile fields
avatar = db.Column(db.Text, nullable=True) # base64 data-url
gender = db.Column(db.String(32), nullable=True)
working_status = db.Column(db.String(64), nullable=True)
dob = db.Column(db.String(10), nullable=True) # YYYY-MM-DD string
bio = db.Column(db.String(500), nullable=True)
is_anonymous = db.Column(db.Boolean, default=False)
assessments = db.relationship("Assessment", backref="user", lazy=True)
def set_password(self, password: str) -> None:
self.password_hash = generate_password_hash(password)
def check_password(self, password: str) -> bool:
return check_password_hash(self.password_hash, password)
def to_dict(self):
return {
"id": self.id,
"username": self.username if not self.is_anonymous else "Anonymous",
"email": self.email,
"created_at": self.created_at.isoformat(),
"avatar": self.avatar,
"gender": self.gender,
"working_status": self.working_status,
"dob": self.dob,
"bio": self.bio,
"is_anonymous": self.is_anonymous,
"display_name": self.username, # always the real name for the owner
}