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" # 已驳回 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) 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") 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 remark: Optional[str] create_time: datetime class Config: from_attributes = True