jiachenlong/backend/app/models/purchase.py

55 lines
2.5 KiB
Python
Raw Normal View History

2026-04-26 21:13:00 +08:00
# purchase - 认购群模型
# Version: 0.0.1 (2026-04-24)
# 认购群、成员、藏品管理
from sqlalchemy import Column, String, Text, Integer, DECIMAL, DateTime, ForeignKey
from sqlalchemy.sql import func
from app.core.database import Base
import uuid
def generate_uuid():
return str(uuid.uuid4())
class PurchaseGroup(Base):
"""认购群表"""
__tablename__ = "purchase_group"
id = Column(String(36), primary_key=True, default=generate_uuid)
name = Column(String(100), nullable=False) # 认购群名称
description = Column(Text, nullable=True) # 描述
creator_id = Column(String(36), nullable=False) # 创建者ID
creator_name = Column(String(50), nullable=True) # 创建者名字
status = Column(String(20), default="active") # active/closed
total_members = Column(Integer, default=0) # 总参与人数
total_collections = Column(Integer, default=0) # 总藏品数
total_amount = Column(DECIMAL(12,2), default=0) # 总金额
avg_price = Column(DECIMAL(10,2), default=0) # 均价
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
class PurchaseMember(Base):
"""认购成员表"""
__tablename__ = "purchase_member"
id = Column(String(36), primary_key=True, default=generate_uuid)
group_id = Column(String(36), ForeignKey("purchase_group.id"), nullable=False)
user_id = Column(String(36), nullable=False)
user_name = Column(String(50), nullable=True)
user_avatar = Column(String(255), nullable=True)
role = Column(String(20), default="member") # creator/admin/member
joined_at = Column(DateTime(timezone=True), server_default=func.now())
class PurchaseCollection(Base):
"""认购藏品表"""
__tablename__ = "purchase_collection"
id = Column(String(36), primary_key=True, default=generate_uuid)
group_id = Column(String(36), ForeignKey("purchase_group.id"), nullable=False)
user_id = Column(String(36), nullable=False)
user_name = Column(String(50), nullable=True)
collection_name = Column(String(100), nullable=True) # 藏品名称
collection_code = Column(String(50), nullable=True) # 藏品编号
number = Column(String(50), nullable=True) # 冠字号
price = Column(DECIMAL(10,2), nullable=False) # 认购价格
status = Column(String(20), default="pending") # pending/confirmed
submitted_at = Column(DateTime(timezone=True), server_default=func.now())