import json from pydantic import BaseModel, field_validator from typing import Optional, Any, Dict from datetime import datetime class TroovSessionBase(BaseModel): slot_date: str slot_time: str session_id: str source: str data: Optional[Dict[str, Any]] = None status: str = "pending" @field_validator("data", 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 TroovSessionCreate(TroovSessionBase): pass class TroovSessionUpdate(BaseModel): slot_date: Optional[str] = None slot_time: Optional[str] = None session_id: Optional[str] = None source: Optional[str] = None data: Optional[Dict[str, Any]] = None status: Optional[str] = None class TroovSessionOut(TroovSessionBase): created_at: datetime updated_at: datetime model_config = { "from_attributes": True }