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) 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) 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