from sqlalchemy import create_engine, Column, Integer, String, DateTime, Boolean, Float, Text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from werkzeug.security import generate_password_hash, check_password_hash from datetime import datetime import secrets Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String(80), unique=True, nullable=False) email = Column(String(120), unique=True, nullable=False) password_hash = Column(String(255), nullable=False) full_name = Column(String(100)) created_at = Column(DateTime, default=datetime.utcnow) last_login = Column(DateTime) is_active = Column(Boolean, default=True) is_verified = Column(Boolean, default=False) # Profile completion status has_completed_initial_survey = Column(Boolean, default=False) initial_survey_date = Column(DateTime) # Session management session_token = Column(String(255)) def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) def generate_session_token(self): self.session_token = secrets.token_urlsafe(32) return self.session_token # Create database engine = create_engine('sqlite:///mental_health_app.db') Base.metadata.create_all(engine) Session = sessionmaker(bind=engine)