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]