from datetime import date, datetime, timezone from pydantic import BaseModel, field_serializer class ActivityLogCreate(BaseModel): child_id: int subject_id: int | None = None session_id: int | None = None log_date: date notes: str | None = None duration_minutes: int | None = None class ActivityLogUpdate(BaseModel): notes: str | None = None duration_minutes: int | None = None subject_id: int | None = None class ActivityLogOut(BaseModel): id: int child_id: int subject_id: int | None session_id: int | None log_date: date notes: str | None duration_minutes: int | None model_config = {"from_attributes": True} class TimelineEventUpdate(BaseModel): event_type: str | None = None occurred_at: datetime | None = None class TimelineEventOut(BaseModel): id: int event_type: str occurred_at: datetime session_date: date child_id: int child_name: str block_label: str | None = None subject_name: str | None = None subject_icon: str | None = None subject_color: str | None = None @field_serializer("occurred_at") def serialize_occurred_at(self, dt: datetime) -> str: if dt.tzinfo is None: dt = dt.replace(tzinfo=timezone.utc) return dt.isoformat()