Local backend needs the cloud DB integer PK to call Connect API endpoints (menu sync, order pending poll). Heartbeat is the only authenticated channel available at startup, so we piggyback the id there rather than adding a new endpoint. Changes: - schemas/site.py: site_numeric_id: int | None added to HeartbeatResponse - routers/heartbeat.py: site_numeric_id=site.id included in response Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
61 lines
1.3 KiB
Python
61 lines
1.3 KiB
Python
from datetime import datetime
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class SiteCreate(BaseModel):
|
|
name: str
|
|
owner_name: str
|
|
contact_email: str
|
|
license_expires_at: datetime
|
|
|
|
|
|
class SiteUpdate(BaseModel):
|
|
name: str | None = None
|
|
owner_name: str | None = None
|
|
contact_email: str | None = None
|
|
license_expires_at: datetime | None = None
|
|
waiter_domain: str | None = None
|
|
|
|
|
|
class SiteOut(BaseModel):
|
|
id: int
|
|
site_id: str
|
|
name: str
|
|
owner_name: str
|
|
contact_email: str
|
|
is_active: bool
|
|
is_locked: bool
|
|
lock_reason: str | None
|
|
license_expires_at: datetime
|
|
created_at: datetime
|
|
last_seen_at: datetime | None
|
|
last_seen_ip: str | None
|
|
last_seen_local_ip: str | None
|
|
waiter_domain: str | None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class SiteCreatedOut(SiteOut):
|
|
secret_key: str
|
|
|
|
|
|
class LockRequest(BaseModel):
|
|
reason: str
|
|
|
|
|
|
class HeartbeatRequest(BaseModel):
|
|
version: str = "1.0.0"
|
|
uptime_seconds: int = 0
|
|
local_ip: str | None = None
|
|
|
|
|
|
class HeartbeatResponse(BaseModel):
|
|
licensed: bool
|
|
locked: bool
|
|
lock_reason: str | None
|
|
expires_at: datetime
|
|
latest_version: str | None = None
|
|
waiter_domain: str | None = None
|
|
site_numeric_id: int | None = None # cloud DB pk — needed by Connect sync loops
|