product.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. @field_validator("extra_fields", mode="before")
  18. def normalize_json_field(cls, v):
  19. if v is None:
  20. return None
  21. if isinstance(v, str):
  22. try:
  23. return json.loads(v)
  24. except Exception:
  25. return {}
  26. return v
  27. class VasProductCreate(VasProductBase):
  28. country: str
  29. city: str
  30. visa_type: Optional[str]
  31. provider: str
  32. title: str
  33. description: str
  34. # extra_fields: Dict[str, Any]
  35. price_amount: int
  36. price_currency: str
  37. schema_id: Optional[int]
  38. class VasProductUpdate(VasProductBase):
  39. pass
  40. class VasProductOut(VasProductBase):
  41. id: int
  42. created_at: datetime
  43. updated_at: datetime
  44. model_config = {
  45. "from_attributes": True
  46. }