"""Base model with common columns shared by all bx_ tables.""" from datetime import datetime from sqlalchemy import BigInteger, String, SmallInteger, DateTime, func from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase from app.database import Base class BaseModel(Base): """Abstract base providing id, create_by, create_time, update_by, update_time.""" __abstract__ = True id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) create_by: Mapped[str | None] = mapped_column(String(64), default=None) create_time: Mapped[datetime] = mapped_column( DateTime, nullable=False, server_default=func.now() ) update_by: Mapped[str | None] = mapped_column(String(64), default=None) update_time: Mapped[datetime] = mapped_column( DateTime, nullable=False, server_default=func.now(), onupdate=func.now() ) class SoftDeleteMixin: """Mixin for soft-delete support (del_flag column).""" del_flag: Mapped[int] = mapped_column( SmallInteger, nullable=False, default=0, server_default="0" )