from sqlalchemy import Column, String, Integer, DateTime, ForeignKey, Enum, DECIMAL from sqlalchemy.sql import func from pydantic import BaseModel, Field from typing import Optional from datetime import datetime from .database import Base import enum from sqlalchemy.orm import relationship class WithdrawStatus(str, enum.Enum): PENDING = "PENDING" # 已申请 APPROVED = "APPROVED" # 已通过 REJECTED = "REJECTED" # 已驳回 CANCELLED = "CANCELLED" # 已取消 class WithdrawDB(Base): __tablename__ = "withdraws" id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("users.userid"), nullable=False) bank_card_id = Column(Integer, ForeignKey("user_bank_cards.id"), nullable=False) amount = Column(DECIMAL(10, 2), nullable=False) status = Column(Enum(WithdrawStatus), nullable=False, default=WithdrawStatus.PENDING) transaction_id = Column(String(64)) # 银行交易流水号 remark = Column(String(200)) # 备注(驳回原因等) create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) # 关联关系 bank_card = relationship("UserBankCardDB", backref="withdraws") user = relationship("UserDB", backref="withdraws") class WithdrawCreate(BaseModel): bank_card_id: int amount: float = Field(..., gt=0) class WithdrawInfo(BaseModel): id: int bank_card_id: int amount: float status: WithdrawStatus transaction_id: Optional[str] = None # 银行交易流水号 remark: Optional[str] create_time: datetime update_time: Optional[datetime] class Config: from_attributes = True