ByteBite Docs
Architecture

Restaurant profile

Public name, address, and contact for a restaurant's single location.

Restaurant profile

A restaurant has one location. The public profile is a separate row from branding and from the order pause. restaurants keeps the name, slug, status, logo URL, colors, and orders_paused. Address and contact live in restaurant_profiles.

A missing profile row is public as profile: null. Checkout does not read the profile. Delivery zones do not match against it.

Table

restaurant_profiles

ColumnNotes
restaurant_idPrimary key and FK → restaurants.id (ON DELETE restrict)
descriptionShort public text, 1–280 characters
street, house_number, postal_code, cityDisplay address. Postal code is five digits
country_codeDE
phone, emailPublic contact. Email is stored lowercased
latitude, longitudeBoth null, or both set
map_urlOptional http or https link, or null
created_at / updated_atTimestamps

API

GET /storefront/restaurant includes profile for the hostname tenant. A restaurantId query does not change the tenant.

MethodPathNotes
GET/dashboard/restaurants/:restaurantId/profile{ restaurantId, profile }. profile is null when the row is missing
PUT/dashboard/restaurants/:restaurantId/profileCreates or replaces the row. Staff session required

PUT body: description, street, house number, postal code, city, countryCode: "DE", phone, email, latitude, longitude, mapUrl. An unknown restaurant is 404. A bad postal code, a single coordinate, or a non-http map link is 400, and the stored row stays as it was. A restaurantId in the body does not switch the tenant.

The dashboard editor is on /.

Seeds

Luigi is Bergmannstraße 12, 10961 Berlin, with a pin and a map link. Mario is Prenzlauer Allee 42, 10405 Berlin, without a pin or a map link. Seeds still create no orders.

On this page