From d74af74534b525449c63e282fe218247aa51eb9f Mon Sep 17 00:00:00 2001 From: v6ole Date: Sun, 12 Jul 2026 13:00:19 +0800 Subject: [PATCH] feat: add Leave Pydantic schemas Co-Authored-By: Claude --- backend/app/schemas/leave.py | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 backend/app/schemas/leave.py diff --git a/backend/app/schemas/leave.py b/backend/app/schemas/leave.py new file mode 100644 index 0000000..60e4bc7 --- /dev/null +++ b/backend/app/schemas/leave.py @@ -0,0 +1,55 @@ +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]