deliveryman-api/app/models/user_account.py
2025-01-24 23:01:31 +08:00

55 lines
1.8 KiB
Python

from sqlalchemy import Column, Integer, DECIMAL, DateTime, ForeignKey, Enum, String
from sqlalchemy.sql import func
from .database import Base
from pydantic import BaseModel, Field
import enum
from typing import Optional
from datetime import datetime
class AccountDetailType(str, enum.Enum):
INCOME = "INCOME" # 收入
EXPENSE = "EXPENSE" # 支出
# 用户账户表
class UserAccountDB(Base):
__tablename__ = "user_accounts"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey("users.userid"), unique=True, nullable=False)
balance = Column(DECIMAL(10, 2), nullable=False, default=0)
lock_balance = Column(DECIMAL(10, 2), nullable=False, default=0)
create_time = Column(DateTime(timezone=True), server_default=func.now())
update_time = Column(DateTime(timezone=True), onupdate=func.now())
# 账户明细表
class AccountDetailDB(Base):
__tablename__ = "account_details"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey("users.userid"), nullable=False)
amount = Column(DECIMAL(10, 2), nullable=False)
type = Column(Enum(AccountDetailType), nullable=False)
description = Column(String(200), nullable=False)
transaction_id = Column(String(64), nullable=True) # 关联订单号
create_time = Column(DateTime(timezone=True), server_default=func.now())
# Pydantic 模型
class AccountInfo(BaseModel):
user_id: int
balance: float
create_time: datetime
update_time: Optional[datetime]
class Config:
from_attributes = True
class AccountDetailInfo(BaseModel):
id: int
user_id: int
amount: float
type: AccountDetailType
description: str
create_time: datetime
class Config:
from_attributes = True