Files
meijiaka-zy/python-api/app/models/base.py
T
小鱼开发 51521fc0dd feat(payment): 微信支付 APIv2 + 积分充值 + SMS 短信 + 双 Token 认证
- 微信支付从 APIv3 降级为 APIv2(MD5/XML)
- 积分系统:充值下单、微信回调、消费冻结/结算/退款
- SMS B2M 短信验证码服务
- 双 Token 认证(Access 30min + Refresh 30days)
- SSE 单设备踢人
- 用户设备管理、积分账户模型
- Alembic 迁移脚本
2026-05-07 18:43:02 +08:00

82 lines
2.0 KiB
Python

"""
基础模型定义
============
"""
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}