import uuid from datetime import datetime from sqlalchemy import String, Float, DateTime, ForeignKey, func, Uuid from sqlalchemy.orm import Mapped, mapped_column from app.database import Base, JSONType class PaymentOrder(Base): __tablename__ = "payment_orders" id: Mapped[uuid.UUID] = mapped_column( Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4, ) user_id: Mapped[str] = mapped_column( String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ) plan: Mapped[str] = mapped_column(String(20), nullable=False) amount: Mapped[float] = mapped_column(Float, nullable=False) currency: Mapped[str] = mapped_column(String(10), default="CNY") payment_provider: Mapped[str] = mapped_column(String(20), nullable=False) payment_id: Mapped[str | None] = mapped_column(String(255), nullable=True) status: Mapped[str] = mapped_column(String(20), default="pending") pay_url: Mapped[str | None] = mapped_column(String(1024), nullable=True) callback_data: Mapped[dict | None] = mapped_column(JSONType, nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, ) paid_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)