import json from pydantic import BaseModel, field_validator from typing import Optional, Dict, Any, Literal, List from datetime import datetime class VasProductBase(BaseModel): country: Optional[str] = None city: Optional[str] = None visa_type: Optional[str] provider: Optional[str] = None title: Optional[str] = None description: Optional[str] = None price_amount: int = 0 price_currency: Optional[str] = None extra_fields: Optional[Dict[str, Any]] = None schema_id: Optional[int] = None enabled: Optional[int] = None recommend_score: Optional[int] = None @field_validator("extra_fields", mode="before") def normalize_json_field(cls, v): if v is None: return None if isinstance(v, str): try: return json.loads(v) except Exception: return {} return v class VasProductCreate(VasProductBase): country: str city: str visa_type: Optional[str] provider: str title: str description: str # extra_fields: Dict[str, Any] price_amount: int price_currency: str schema_id: Optional[int] recommend_score: int = 0 class VasProductUpdate(VasProductBase): pass class VasProductOut(VasProductBase): id: int created_at: datetime updated_at: datetime model_config = { "from_attributes": True }