from datetime import datetime import sqlalchemy as sa from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine import os Base = declarative_base() class User(Base): __tablename__ = 'users' id = sa.Column(sa.Integer, primary_key=True) username = sa.Column(sa.String(50), unique=True, nullable=False) password = sa.Column(sa.String(255), nullable=False) full_name = sa.Column(sa.String(100)) email = sa.Column(sa.String(100)) school = sa.Column(sa.String(100)) grade = sa.Column(sa.String(20)) profile_photo = sa.Column(sa.Text) # Store photo as base64 created_at = sa.Column(sa.DateTime, default=datetime.utcnow) updated_at = sa.Column(sa.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) class History(Base): __tablename__ = 'history' id = sa.Column(sa.Integer, primary_key=True) user_id = sa.Column(sa.Integer, sa.ForeignKey('users.id'), nullable=False) equation = sa.Column(sa.String(255), nullable=False) solution = sa.Column(sa.Text, nullable=False) created_at = sa.Column(sa.DateTime, default=datetime.utcnow) # Database setup engine = create_engine(os.environ['DATABASE_URL']) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def init_db(): Base.metadata.create_all(bind=engine) def get_db(): db = SessionLocal() try: yield db finally: db.close()