Backend: synchronous print status on add_items

add_items now runs printer routing synchronously and returns
{ order, print_results } so the waiter PWA can show per-printer
ack or failure without guessing. Extracted _do_route_and_print
so the background-task path (route_and_print) is unchanged for
other callers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-24 17:35:08 +03:00
parent da29d73520
commit 26c4818aa1
3 changed files with 375 additions and 73 deletions

View File

@@ -42,6 +42,22 @@ class OrderItemOut(BaseModel):
status: str
added_at: datetime
printed: bool
paid_by: Optional[int] = None
paid_at: Optional[datetime] = None
payment_method: Optional[str] = None
model_config = {"from_attributes": True}
class PrintResultOut(BaseModel):
printer_name: str
success: bool
error: Optional[str] = None
class AddItemsResponse(BaseModel):
order: "OrderOut"
print_results: List[PrintResultOut]
model_config = {"from_attributes": True}
@@ -52,6 +68,7 @@ class OrderCreate(BaseModel):
class PayItemsRequest(BaseModel):
item_ids: List[int]
payment_method: Optional[str] = None # 'cash' | 'card' | 'other' — optional for now
class AssignWaiterRequest(BaseModel):
@@ -63,6 +80,21 @@ class OrderWaiterOut(BaseModel):
model_config = {"from_attributes": True}
class AuditLogOut(BaseModel):
id: int
order_id: int
event_type: str
waiter_id: Optional[int] = None
waiter_name: Optional[str] = None # resolved server-side
item_ids: Optional[str] = None
amount: Optional[float] = None
payment_method: Optional[str] = None
note: Optional[str] = None
created_at: datetime
model_config = {"from_attributes": True}
class OrderOut(BaseModel):
id: int
table_id: int
@@ -74,5 +106,6 @@ class OrderOut(BaseModel):
notes: Optional[str] = None
items: List[OrderItemOut] = []
waiters: List[OrderWaiterOut] = []
audit_logs: List[AuditLogOut] = []
model_config = {"from_attributes": True}