"""API schemas (Pydantic) for PlannedLeaveDay. Schemas validate request bodies and shape responses. Separate from domain entities so the wire format can evolve independently. """ from datetime import date, datetime from uuid import UUID from pydantic import BaseModel, Field from app.entities.planned_leave import PlannedLeaveDay class PlannedLeaveDayCreate(BaseModel): workspace_id: UUID child_id: UUID parent_personal_data_uuid: UUID date: date day_type: str = Field(pattern="^(sjukpenning|lagsta|vacation)$") is_dubbeldag: bool = False # Which `LeaveWish` produced this day; None = ad-hoc. wish_id: UUID | None = None is_pinned: bool = False class PlannedLeaveDayUpdate(BaseModel): """Partial update — all fields optional.""" day_type: str | None = Field(None, pattern="^(sjukpenning|lagsta|vacation)$") is_dubbeldag: bool | None = None wish_id: UUID | None = None is_pinned: bool | None = None class PlannedLeaveDayResponse(BaseModel): id: UUID workspace_id: UUID child_id: UUID parent_personal_data_uuid: UUID date: date day_type: str is_dubbeldag: bool wish_id: UUID | None is_pinned: bool created_at: datetime | None updated_at: datetime | None @classmethod def from_entity(cls, entity: PlannedLeaveDay) -> "PlannedLeaveDayResponse": return cls( id=entity.id, workspace_id=entity.workspace_id, child_id=entity.child_id, parent_personal_data_uuid=entity.parent_personal_data_uuid, date=entity.date, day_type=entity.day_type, is_dubbeldag=entity.is_dubbeldag, wish_id=entity.wish_id, is_pinned=entity.is_pinned, created_at=entity.created_at, updated_at=entity.updated_at, )