inquiry.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. """Pydantic schemas - 询价单管理"""
  2. from pydantic import BaseModel, Field
  3. from typing import Optional, List
  4. from datetime import datetime
  5. from decimal import Decimal
  6. class InquiryItemBase(BaseModel):
  7. """询价单项基础字段"""
  8. product_id: str = Field(..., description="商品ID")
  9. class InquiryItemCreate(InquiryItemBase):
  10. """创建询价单项请求"""
  11. pass
  12. class InquiryItemResponse(InquiryItemBase):
  13. """询价单项响应"""
  14. id: str
  15. inquiry_id: str
  16. is_del: int
  17. class Config:
  18. from_attributes = True
  19. class InquiryBase(BaseModel):
  20. """询价单基础字段"""
  21. region_id: str = Field(..., description="区域ID")
  22. title: str = Field(..., max_length=200, description="询价单标题")
  23. remark: Optional[str] = Field(None, max_length=1000, description="备注")
  24. class InquiryCreate(InquiryBase):
  25. """创建询价单请求"""
  26. product_ids: List[str] = Field(default_factory=list, description="商品ID列表")
  27. class InquiryUpdate(BaseModel):
  28. """更新询价单请求"""
  29. title: Optional[str] = Field(None, max_length=200, description="询价单标题")
  30. remark: Optional[str] = Field(None, max_length=1000, description="备注")
  31. product_ids: Optional[List[str]] = Field(None, description="商品ID列表")
  32. class InquiryResponse(InquiryBase):
  33. """询价单响应"""
  34. id: str
  35. status: str
  36. publish_time: Optional[datetime] = None
  37. close_time: Optional[datetime] = None
  38. is_del: int
  39. create_at: Optional[datetime] = None
  40. create_by: Optional[str] = None
  41. create_name: Optional[str] = None
  42. update_at: Optional[datetime] = None
  43. class Config:
  44. from_attributes = True
  45. class InquiryDetailResponse(InquiryResponse):
  46. """询价单详情响应(包含询价项)"""
  47. items: List[InquiryItemResponse] = []
  48. class InquiryListResponse(BaseModel):
  49. """询价单列表响应"""
  50. items: List[InquiryResponse]
  51. total: int
  52. page: int
  53. pageSize: int
  54. totalPages: int
  55. class InquiryStatusResponse(BaseModel):
  56. """询价单状态更新响应"""
  57. id: str
  58. status: str
  59. message: str = "操作成功"