base.py 1.1 KB

1234567891011121314151617181920212223242526272829
  1. """Base model with common columns shared by all bx_ tables."""
  2. from datetime import datetime
  3. from sqlalchemy import BigInteger, String, SmallInteger, DateTime, func
  4. from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase
  5. from app.database import Base
  6. class BaseModel(Base):
  7. """Abstract base providing id, create_by, create_time, update_by, update_time."""
  8. __abstract__ = True
  9. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  10. create_by: Mapped[str | None] = mapped_column(String(64), default=None)
  11. create_time: Mapped[datetime] = mapped_column(
  12. DateTime, nullable=False, server_default=func.now()
  13. )
  14. update_by: Mapped[str | None] = mapped_column(String(64), default=None)
  15. update_time: Mapped[datetime] = mapped_column(
  16. DateTime, nullable=False, server_default=func.now(), onupdate=func.now()
  17. )
  18. class SoftDeleteMixin:
  19. """Mixin for soft-delete support (del_flag column)."""
  20. del_flag: Mapped[int] = mapped_column(
  21. SmallInteger, nullable=False, default=0, server_default="0"
  22. )