fix: QR menu branding fields — display name, header image, empty-to-hide
- menu_display_name is now separate from the site's internal name (was
incorrectly showing the sysadmin-only site name on the public menu).
- Header image now resolves against the cloud API origin instead of
the menu-app's own origin, fixing the broken-image icon.
- Tagline/blurb/hours now genuinely hide when cleared: the sysadmin
save handler was converting empty fields to null, which the PUT
endpoint's exclude_none silently drops instead of clearing.
- Added a settable blurb (EN/GR) below the tagline, previously
hardcoded ("Fresh seasonal plates, served with care.").
- Collapsed hours from two fields (EN/GR) to one — opening hours don't
vary by language.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -45,9 +45,13 @@ def _run_migrations():
|
||||
"ALTER TABLE sites ADD COLUMN menu_mode VARCHAR NOT NULL DEFAULT 'order'",
|
||||
"ALTER TABLE sites ADD COLUMN menu_tagline_en VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_tagline_gr VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_hours_en VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_hours_gr VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_hours_en VARCHAR", # superseded by menu_hours, kept for history
|
||||
"ALTER TABLE sites ADD COLUMN menu_hours_gr VARCHAR", # superseded by menu_hours, kept for history
|
||||
"ALTER TABLE sites ADD COLUMN menu_header_image_url VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_display_name VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_blurb_en VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_blurb_gr VARCHAR",
|
||||
"ALTER TABLE sites ADD COLUMN menu_hours VARCHAR",
|
||||
]
|
||||
for sql in migrations:
|
||||
try:
|
||||
|
||||
@@ -26,8 +26,10 @@ class Site(Base):
|
||||
|
||||
# QR menu branding/config
|
||||
menu_mode = Column(String, nullable=False, default="order") # "order" | "view_only"
|
||||
menu_display_name = Column(String, nullable=True)
|
||||
menu_tagline_en = Column(String, nullable=True)
|
||||
menu_tagline_gr = Column(String, nullable=True)
|
||||
menu_hours_en = Column(String, nullable=True)
|
||||
menu_hours_gr = Column(String, nullable=True)
|
||||
menu_blurb_en = Column(String, nullable=True)
|
||||
menu_blurb_gr = Column(String, nullable=True)
|
||||
menu_hours = Column(String, nullable=True)
|
||||
menu_header_image_url = Column(String, nullable=True)
|
||||
|
||||
@@ -39,9 +39,10 @@ def get_menu(site_slug: str, db: Session = Depends(get_db)):
|
||||
data = json.loads(snapshot.snapshot_json)
|
||||
data["menu_mode"] = site.menu_mode
|
||||
data["restaurant"] = {
|
||||
"name": site.name,
|
||||
"name": site.menu_display_name,
|
||||
"tagline": {"en": site.menu_tagline_en, "gr": site.menu_tagline_gr},
|
||||
"hours": {"en": site.menu_hours_en, "gr": site.menu_hours_gr},
|
||||
"blurb": {"en": site.menu_blurb_en, "gr": site.menu_blurb_gr},
|
||||
"hours": site.menu_hours,
|
||||
"headerImageUrl": site.menu_header_image_url,
|
||||
}
|
||||
return data
|
||||
|
||||
@@ -16,10 +16,12 @@ class SiteUpdate(BaseModel):
|
||||
license_expires_at: datetime | None = None
|
||||
waiter_domain: str | None = None
|
||||
menu_mode: str | None = None
|
||||
menu_display_name: str | None = None
|
||||
menu_tagline_en: str | None = None
|
||||
menu_tagline_gr: str | None = None
|
||||
menu_hours_en: str | None = None
|
||||
menu_hours_gr: str | None = None
|
||||
menu_blurb_en: str | None = None
|
||||
menu_blurb_gr: str | None = None
|
||||
menu_hours: str | None = None
|
||||
|
||||
|
||||
class SiteOut(BaseModel):
|
||||
@@ -38,10 +40,12 @@ class SiteOut(BaseModel):
|
||||
last_seen_local_ip: str | None
|
||||
waiter_domain: str | None
|
||||
menu_mode: str
|
||||
menu_display_name: str | None
|
||||
menu_tagline_en: str | None
|
||||
menu_tagline_gr: str | None
|
||||
menu_hours_en: str | None
|
||||
menu_hours_gr: str | None
|
||||
menu_blurb_en: str | None
|
||||
menu_blurb_gr: str | None
|
||||
menu_hours: str | None
|
||||
menu_header_image_url: str | None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
Reference in New Issue
Block a user