TorbatYar/backend/services/hospitality/app/schemas/table_service.py
Mortezakoohjani 5c6a2e78cf feat(platform): seed service registry, deploy all modules, and fix homepage catalog.
Register all active platform services and base features in core DB so admin can manage them, add delivery/hospitality/sports-center backend phases, update apps catalog and production deploy tooling.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 12:39:51 +03:30

147 lines
3.6 KiB
Python

"""Table Service & Reservations DTOs — Phase 12.3."""
from __future__ import annotations
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, Field
from app.models.types import (
ReservationStatus,
ServiceRequestKind,
ServiceRequestStatus,
TableAssignmentStatus,
WaitlistStatus,
)
from app.schemas.common import ORMBase
class ReservationCreate(BaseModel):
venue_id: UUID
branch_id: UUID | None = None
dining_area_id: UUID | None = None
table_id: UUID | None = None
code: str = Field(max_length=50)
guest_name: str = Field(max_length=255)
guest_phone: str | None = Field(default=None, max_length=32)
party_size: int = 1
reserved_from: datetime
reserved_to: datetime
notes: str | None = None
metadata_json: dict | None = None
class ReservationStatusUpdate(BaseModel):
status: ReservationStatus
class ReservationRead(ORMBase):
id: UUID
tenant_id: UUID
venue_id: UUID
branch_id: UUID | None
dining_area_id: UUID | None
table_id: UUID | None
code: str
guest_name: str
guest_phone: str | None
party_size: int
status: ReservationStatus
reserved_from: datetime
reserved_to: datetime
notes: str | None
metadata_json: dict | None
is_deleted: bool
created_by: str | None
updated_by: str | None
created_at: datetime
updated_at: datetime
class TableAssignmentCreate(BaseModel):
venue_id: UUID
table_id: UUID
reservation_id: UUID | None = None
ordering_session_id: UUID | None = None
guest_label: str | None = Field(default=None, max_length=255)
metadata_json: dict | None = None
class TableAssignmentRead(ORMBase):
id: UUID
tenant_id: UUID
venue_id: UUID
table_id: UUID
reservation_id: UUID | None
ordering_session_id: UUID | None
status: TableAssignmentStatus
assigned_at: datetime | None
released_at: datetime | None
guest_label: str | None
metadata_json: dict | None
is_deleted: bool
created_by: str | None
updated_by: str | None
created_at: datetime
updated_at: datetime
class ServiceRequestCreate(BaseModel):
venue_id: UUID
table_id: UUID
table_assignment_id: UUID | None = None
code: str = Field(max_length=50)
kind: ServiceRequestKind = ServiceRequestKind.OTHER
notes: str | None = None
class ServiceRequestStatusUpdate(BaseModel):
status: ServiceRequestStatus
class ServiceRequestRead(ORMBase):
id: UUID
tenant_id: UUID
venue_id: UUID
table_id: UUID
table_assignment_id: UUID | None
code: str
kind: ServiceRequestKind
status: ServiceRequestStatus
notes: str | None
is_deleted: bool
created_by: str | None
updated_by: str | None
created_at: datetime
updated_at: datetime
class WaitlistEntryCreate(BaseModel):
venue_id: UUID
code: str = Field(max_length=50)
guest_name: str = Field(max_length=255)
party_size: int = 1
phone: str | None = Field(default=None, max_length=32)
notes: str | None = None
class WaitlistEntryStatusUpdate(BaseModel):
status: WaitlistStatus
class WaitlistEntryRead(ORMBase):
id: UUID
tenant_id: UUID
venue_id: UUID
code: str
guest_name: str
party_size: int
status: WaitlistStatus
phone: str | None
notes: str | None
is_deleted: bool
created_by: str | None
updated_by: str | None
created_at: datetime
updated_at: datetime