from __future__ import annotations from typing import List, Optional from datetime import datetime, timezone from pydantic import BaseModel, Field # ====== Chat history ====== class Message(BaseModel): role: str = "user" content: str = "" ts: Optional[str] = None class ChatRequest(BaseModel): message: str = "" # 🚀 Beri default string kosong agar tidak 422 saat di-ping payload kosong history: List[Message] = Field(default_factory=list) username: Optional[str] = "Baka" # ====== Device register ====== class RegisterRequest(BaseModel): fcm_token: str # ====== Scheduler ====== class ScheduleRequest(BaseModel): task: str scheduled_time: str user_id: str @property def remind_at_utc(self) -> datetime: try: clean_ts = self.scheduled_time.replace("Z", "+00:00") dt = datetime.fromisoformat(clean_ts) if dt.tzinfo is None: return dt.replace(tzinfo=timezone.utc) return dt.astimezone(timezone.utc) except ValueError as e: raise ValueError( f"Format scheduled_time tidak valid: {self.scheduled_time}" ) from e