deliveryman-api/app/models/withdraw.py
2025-03-26 11:01:44 +08:00

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