{{--
Микроразметка страницы заведения (ТЗ §18.5).
Выводится только то, что действительно есть на странице: рейтинг — при
наличии опубликованных отзывов, часы работы — при заполненном графике.
Разметка, не соответствующая видимому содержимому, — прямой путь к ручным
санкциям поисковика.
--}}
@php
$rating = $venue->rating;
$hasRating = $rating !== null && $rating->reviews_count > 0;
// schema.org ждёт англоязычные сокращения дней; в базе — ISO-8601,
// где 1 — понедельник (решение заказчика D8).
$schemaWeekdays = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday'];
$openingHours = $venue->schedules
->reject(fn ($day) => $day->is_day_off || $day->opens_at === null || $day->closes_at === null)
->map(fn ($day) => [
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'https://schema.org/'.($schemaWeekdays[$day->weekday] ?? 'Monday'),
'opens' => substr((string) $day->opens_at, 0, 5),
'closes' => substr((string) $day->closes_at, 0, 5),
])
->values()
->all();
$schema = array_filter([
'@context' => 'https://schema.org',
'@type' => 'Restaurant',
'name' => $venue->name,
'url' => url($venue->publicPath()),
'address' => array_filter([
'@type' => 'PostalAddress',
'addressLocality' => $city->name,
'streetAddress' => $venue->address,
'addressCountry' => 'RU',
]),
'geo' => $venue->latitude !== null && $venue->longitude !== null ? [
'@type' => 'GeoCoordinates',
'latitude' => $venue->latitude,
'longitude' => $venue->longitude,
] : null,
'telephone' => $venue->publicPhone(),
'servesCuisine' => $venue->cuisines->pluck('name')->all() ?: null,
'priceRange' => $venue->profile?->averageBillForHumans(),
'image' => $venue->profile?->primaryPhoto?->largeUrl(),
'aggregateRating' => $hasRating ? [
'@type' => 'AggregateRating',
'ratingValue' => number_format((float) $rating->average_rating, 1, '.', ''),
'reviewCount' => $rating->reviews_count,
'bestRating' => 5,
'worstRating' => 1,
] : null,
'openingHoursSpecification' => $openingHours ?: null,
], static fn ($value) => $value !== null && $value !== []);
$breadcrumbs = [
'@context' => 'https://schema.org',
'@type' => 'BreadcrumbList',
'itemListElement' => [
['@type' => 'ListItem', 'position' => 1, 'name' => 'Главная', 'item' => url('/')],
['@type' => 'ListItem', 'position' => 2, 'name' => $city->name, 'item' => route('catalog.city', $city->slug)],
['@type' => 'ListItem', 'position' => 3, 'name' => $venue->name, 'item' => url($venue->publicPath())],
],
];
@endphp