59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
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]
|