from __future__ import annotations from pydantic import BaseModel, Field class MemberPayload(BaseModel): id: int | None = None name: str = Field(min_length=1) employee_id: str = "" company: str = "" rank: str = "" role: str = "" department: str = "" grp: str = "" division: str = "" team: str = "" cell: str = "" work_status: str = "" work_time: str = "" phone: str = "" email: str = "" seat_label: str = "" photo_url: str = "" sort_order: int | None = None class MemberBulkPayload(BaseModel): items: list[MemberPayload] class SeatMapPayload(BaseModel): name: str = Field(min_length=1) image_url: str = "" source_type: str = "image" source_url: str = "" preview_svg: str = "" view_box_min_x: float | None = None view_box_min_y: float | None = None view_box_width: float | None = None view_box_height: float | None = None image_width: int | None = None image_height: int | None = None grid_rows: int = Field(default=1, ge=1, le=200) grid_cols: int = Field(default=1, ge=1, le=200) cell_gap: int = Field(default=0, ge=0, le=24) is_active: bool = True class SeatLayoutPlacementPayload(BaseModel): member_id: int seat_slot_id: int | None = None row_index: int = Field(default=0, ge=0) col_index: int = Field(default=0, ge=0) seat_label: str = "" class SeatLayoutPayload(BaseModel): placements: list[SeatLayoutPlacementPayload]