from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, JSON, Enum from sqlalchemy.sql import func from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime from .database import Base from sqlalchemy.orm import relationship import enum class ComplaintStatus(str, enum.Enum): """投诉状态枚举""" PENDING = "PENDING" # 等待处理 PROCESSED = "PROCESSED" # 已处理 class MerchantComplaintDB(Base): """商家投诉表""" __tablename__ = "merchant_complaints" id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("users.userid"), nullable=False) # 投诉用户ID merchant_id = Column(Integer, ForeignKey("merchants.id"), nullable=False) # 被投诉商家ID content = Column(Text, nullable=False) # 投诉内容 image_urls = Column(JSON, nullable=True) # 投诉图片URL列表,JSON格式存储 status = Column(Enum(ComplaintStatus), default=ComplaintStatus.PENDING, nullable=False) # 投诉状态 create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) # 关联用户 user = relationship("UserDB", backref="merchant_complaints") # 关联商家 merchant = relationship("MerchantDB", backref="merchant_complaints") # Pydantic 模型,用于API请求和响应 class MerchantComplaintCreate(BaseModel): user_id: int = Field(..., description="投诉用户ID") merchant_id: int = Field(..., description="被投诉商家ID") content: str = Field(..., description="投诉内容") image_urls: Optional[List[str]] = Field(default=None, description="投诉图片URL列表") class MerchantComplaintUpdate(BaseModel): status: ComplaintStatus = Field(..., description="投诉状态") class MerchantComplaintInfo(BaseModel): id: int user_id: int merchant_id: int content: str image_urls: Optional[List[str]] = None status: ComplaintStatus create_time: datetime update_time: Optional[datetime] = None # 额外字段,用于API响应 user_name: Optional[str] = None # 投诉用户名称 merchant_name: Optional[str] = None # 被投诉商家名称 class Config: from_attributes = True