Adds four new routers, three schema files, and one new model.
All new endpoints use new URL prefixes — no existing routes touched.
routers/menu.py
GET /api/menu/{site_slug} — public menu snapshot (no auth)
POST /api/menu/sync — upsert snapshot (site API key)
routers/orders.py
POST /api/orders/{site_slug} — customer places order (public)
GET /api/orders/status/{public_ref} — customer tracks order (public)
GET /api/orders/pending/{site_id} — local backend polls (site key)
POST /api/orders/{id}/synced — mark synced (site key)
PATCH /api/orders/{id}/status — update status with transition
validation (site key)
routers/manager_auth.py
POST /api/manager/register — create manager account (admin JWT)
POST /api/manager/login — returns manager JWT
POST /api/manager/refresh — refreshes manager JWT
Shared _get_current_manager dependency used by remote_dashboard
routers/remote_dashboard.py
GET /api/remote/sites — manager JWT
GET /api/remote/sites/{id}/snapshot — manager JWT
GET /api/remote/sites/{id}/orders — manager JWT
GET /api/remote/sites/{id}/orders/pending — manager JWT
PATCH /api/remote/sites/{id}/orders/{oid}/status — manager JWT
POST /api/remote/snapshot — site API key
(stats push)
models/stats_snapshot.py (NEW)
stats_snapshots table — one row per site, holds serialized
operational stats; created by create_all on startup
config.py / .env.example
MANAGER_JWT_SECRET and MANAGER_JWT_EXPIRE_HOURS (default 72h)
added as separate settings from the admin SECRET_KEY
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 lines
821 B
Plaintext
23 lines
821 B
Plaintext
# Cloud Backend — copy this to .env and fill in values
|
|
|
|
# Generate with: python -c "import secrets; print(secrets.token_hex(32))"
|
|
SECRET_KEY=change-me-generate-a-long-random-string
|
|
|
|
# SQLite for local dev. Switch to postgresql://user:pass@host/dbname for VPS.
|
|
DATABASE_URL=sqlite:////app/data/cloud.db
|
|
|
|
# JWT expiry in minutes
|
|
ACCESS_TOKEN_EXPIRE_MINUTES=60
|
|
|
|
# Default sysadmin credentials (created on first startup if admin table is empty)
|
|
ADMIN_USERNAME=sysadmin
|
|
ADMIN_PASSWORD=changeme
|
|
|
|
# The current latest release version — clients compare against this to detect updates
|
|
LATEST_VERSION=0.0.0
|
|
|
|
# Xenia Connect — manager JWT (use a different secret from SECRET_KEY)
|
|
# Generate with: python -c "import secrets; print(secrets.token_hex(32))"
|
|
MANAGER_JWT_SECRET=change-me-manager-secret
|
|
MANAGER_JWT_EXPIRE_HOURS=72
|