""" 基础模型定义 ============ """ import uuid from datetime import UTC, datetime from sqlalchemy import BigInteger, DateTime from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from app.db.session import Base class BaseModel(Base): """ 基础模型 - UUID 主键 适用于需要暴露给外部、跨系统的表(如用户表)。 提供 UUID 主键 + 创建时间 + 更新时间。 """ __abstract__ = True id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(UTC), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC), nullable=False, ) def to_dict(self) -> dict: """转换为字典(用于序列化)""" return {column.name: getattr(self, column.name) for column in self.__table__.columns} class BaseModelBigInt(Base): """ 基础模型 - BigInt 自增主键 适用于内部表、数据量大的表(如积分流水、设备记录)。 提供 BigInt 自增主键 + 创建时间 + 更新时间。 """ __abstract__ = True id: Mapped[int] = mapped_column( BigInteger, primary_key=True, autoincrement=True, ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(UTC), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC), nullable=False, ) def to_dict(self) -> dict: """转换为字典(用于序列化)""" return {column.name: getattr(self, column.name) for column in self.__table__.columns}