58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
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 |