from datetime import date, datetime from uuid import UUID from pydantic import BaseModel, Field LEAVE_TYPES = ["年假", "事假", "病假", "调休", "其他"] class LeaveCreate(BaseModel): manager_id: UUID leave_type: str = Field(default="事假", pattern="^(年假|事假|病假|调休|其他)$") start_date: date end_date: date reason: str = "" class LeaveUpdate(BaseModel): manager_id: UUID | None = None leave_type: str | None = Field(default=None, pattern="^(年假|事假|病假|调休|其他)$") start_date: date | None = None end_date: date | None = None reason: str | None = None class LeaveOut(BaseModel): id: UUID manager_id: UUID manager_name: str = "" leave_type: str start_date: date end_date: date days: int = 0 reason: str = "" submitted_by: UUID submitted_by_name: str = "" created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True} class LeaveOverviewItem(BaseModel): manager_id: UUID manager_name: str leave_type: str start_date: date end_date: date days: int class LeaveOverview(BaseModel): week_start: str week_end: str total_on_leave: int leave_list: list[LeaveOverviewItem]