deliveryman-api/app/models/merchant_complaint.py
2025-03-20 09:10:27 +08:00

58 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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