""" models/base.py — declarative base & the Messages model. """ from sqlalchemy import create_engine, Integer, String, Text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker from typing import Optional class Base(DeclarativeBase): pass class Messages(Base): __tablename__ = "messages" id: Mapped[int] = mapped_column(Integer, primary_key=True) channel: Mapped[str] = mapped_column(String(32), nullable=False, default="general") ip: Mapped[str] = mapped_column(String(64), nullable=False) content: Mapped[str] = mapped_column(Text, nullable=False) gif_url: Mapped[Optional[str]] = mapped_column(Text, nullable=True, default=None) timestamp: Mapped[int] = mapped_column(Integer, nullable=False) def make_engine(db_cfg): """Create a SQLAlchemy engine from DatabaseConfig.""" if db_cfg.engine == "mariadb": url = ( f"mysql+pymysql://{db_cfg.mariadb_user}:{db_cfg.mariadb_password}" f"@{db_cfg.mariadb_host}:{db_cfg.mariadb_port}/{db_cfg.mariadb_database}" ) else: url = f"sqlite:///{db_cfg.sqlite_path}" engine = create_engine(url, echo=False) Base.metadata.create_all(engine) return engine