Files
xenia-pos-cloud/cloud_backend/schemas/site.py
bonamin abe7f4ff0d feat(connect): return site_numeric_id in heartbeat response
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>
2026-06-01 00:11:48 +03:00

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