Spaces:
Running
Running
| 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 | |
| } | |