"""Pydantic schemas for parental leave fetch endpoints.""" from datetime import datetime from uuid import UUID from pydantic import BaseModel, Field from app.entities.parental_leave import ParentalLeaveFetch, TierData class TierDataResponse(BaseModel): sjukpenning_total: int sjukpenning_used: int sjukpenning_left: int lagsta_niva_total: int lagsta_niva_used: int lagsta_niva_left: int @classmethod def from_entity(cls, td: TierData) -> "TierDataResponse": return cls( sjukpenning_total=td.sjukpenning_total, sjukpenning_used=td.sjukpenning_used, sjukpenning_left=td.sjukpenning_left, lagsta_niva_total=td.lagsta_niva_total, lagsta_niva_used=td.lagsta_niva_used, lagsta_niva_left=td.lagsta_niva_left, ) class ManualFetchRequest(BaseModel): personal_data_uuid: UUID workspace_id: UUID child_id: UUID total_days: int = Field(ge=0, le=480) days_used: int = Field(ge=0, le=480) reserved_days_total: int = Field(default=90, ge=0, le=240) reserved_days_left: int = Field(ge=0, le=240) transferable_days_left: int = Field(ge=0, le=150) dubbeldagar_left: int = Field(default=60, ge=0, le=60) sjukpenning_total: int = Field(default=390, ge=0, le=390) sjukpenning_used: int = Field(ge=0, le=390) lagsta_niva_total: int = Field(default=90, ge=0, le=90) lagsta_niva_used: int = Field(ge=0, le=90) class ParentalLeaveFetchResponse(BaseModel): id: UUID personal_data_uuid: UUID workspace_id: UUID child_id: UUID source: str fetched_at: datetime total_days: int days_used: int days_left: int reserved_days_total: int reserved_days_left: int transferable_days_left: int dubbeldagar_left: int tier_data: TierDataResponse created_at: datetime | None updated_at: datetime | None @classmethod def from_entity(cls, fetch: ParentalLeaveFetch) -> "ParentalLeaveFetchResponse": return cls( id=fetch.id, personal_data_uuid=fetch.personal_data_uuid, workspace_id=fetch.workspace_id, child_id=fetch.child_id, source=fetch.source, fetched_at=fetch.fetched_at, total_days=fetch.total_days, days_used=fetch.days_used, days_left=fetch.days_left, reserved_days_total=fetch.reserved_days_total, reserved_days_left=fetch.reserved_days_left, transferable_days_left=fetch.transferable_days_left, dubbeldagar_left=fetch.dubbeldagar_left, tier_data=TierDataResponse.from_entity(fetch.tier_data), created_at=fetch.created_at, updated_at=fetch.updated_at, )