49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
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 |