product.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import json
  2. from pydantic import BaseModel, field_validator
  3. from typing import Optional, Dict, Any, Literal, List
  4. from datetime import datetime
  5. class VasProductBase(BaseModel):
  6. country: Optional[str] = None
  7. city: Optional[str] = None
  8. visa_type: Optional[str]
  9. provider: Optional[str] = None
  10. title: Optional[str] = None
  11. description: Optional[str] = None
  12. price_amount: int = 0
  13. price_currency: Optional[str] = None
  14. extra_fields: Optional[Dict[str, Any]] = None
  15. schema_id: Optional[int] = None
  16. enabled: Optional[int] = None
  17. recommend_score: Optional[int] = None
  18. @field_validator("extra_fields", mode="before")
  19. def normalize_json_field(cls, v):
  20. if v is None:
  21. return None
  22. if isinstance(v, str):
  23. try:
  24. return json.loads(v)
  25. except Exception:
  26. return {}
  27. return v
  28. class VasProductCreate(VasProductBase):
  29. country: str
  30. city: str
  31. visa_type: Optional[str]
  32. provider: str
  33. title: str
  34. description: str
  35. # extra_fields: Dict[str, Any]
  36. price_amount: int
  37. price_currency: str
  38. schema_id: Optional[int]
  39. recommend_score: int = 0
  40. class VasProductUpdate(VasProductBase):
  41. pass
  42. class VasProductOut(VasProductBase):
  43. id: int
  44. created_at: datetime
  45. updated_at: datetime
  46. model_config = {
  47. "from_attributes": True
  48. }