Files
2026-10-11 22:24:54 +05:00

66 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Аудит и изменения проекта НЕОН
## Что проверено
- Исходная структура проекта, `package.json`, TypeScript-конфигурация и Vite-конфигурация.
- Страница меню и все три набора данных: авторский чай, пивная карта, барное меню.
- Все 57 файлов в `public/menu` и `public/menu/manifest.json`.
- Поиск по проекту на предмет старого реестра изображений и неиспользуемых ссылок.
- TypeScript-проверка и самотест движка миксов.
## Что изменено
### Фотографии меню
Создан единый `src/data/menuPhotos.ts` с привязкой по `id` позиции меню.
- 51 из 51 текущих позиций меню имеют привязанные фотографии.
- Все 51 файла реально существуют в `public/menu`.
- Для авторского чая использованы соответствующие изображения из того же набора; названия файлов исторически отличаются от текущих названий позиций.
- 6 файлов из `public/menu` намеренно не привязаны: это изображения, которым в текущем каталоге нет соответствующей позиции (`photo`, два кальяна и три прочих позиции/сборы).
Старый `src/data/menuImages.ts` удалён: он ссылался на несуществующие пути `images/tea` и `images/beer` и содержал неиспользуемые fallback-цепочки.
### Карточки меню
- Фото добавлены непосредственно в существующие карточки без смены базовой стилистики.
- Добавлена lazy-loading загрузка изображений.
- При ошибке загрузки карточка автоматически возвращается к исходной иконке.
- Кнопка `В корзину` интегрирована в существующую карточку.
### Корзина и управление количеством
`src/components/MenuCart.tsx` и `src/pages/MenuPage.tsx` получили косметический рефакторинг UX.
- На карточке позиции вместо однонаправленной кнопки теперь используется `В корзину`, а после добавления — полноценный степпер `− / количество / +`.
- Уменьшение количества из меню сразу действует на выбранного гостя и удаляет позицию при снижении количества до нуля.
- Выбор активного гостя в меню переведён с выпадающего списка на компактные переключатели.
- В корзине количество гостей задаётся степпером 1–12, без громоздкого select.
- Активный гость в корзине выбирается отдельными кнопками; новые позиции из меню попадают выбранному гостю.
- Позиции по-прежнему группируются по гостям, но карточки стали компактнее и понятнее; перераспределение позиции между гостями сохранено.
- Итоговая сумма, копирование заказа, очистка, `Esc`, блокировка прокрутки и хранение в `localStorage` сохранены.
- Заказ никуда автоматически не отправляется — это рабочий список для оформления у официанта.
### Очистка проекта
- Из моделей `teaMenu`, `beerMenu`, `barMenu` убраны старые поля/импорты изображений, которые больше не нужны.
- Удалена дублирующаяся папка `public/images/menu`: приложение её не использовало, а сами актуальные фото находятся в `public/menu`.
- Контейнерный Caddy удалён: Caddy работает на уровне хоста.
- Docker-инфраструктура приложения возвращена отдельным `docker-compose.yml` + `Dockerfile`; HTTPS и доменная маршрутизация остаются на хостовом Caddy.
- В контейнере используется nginx только как HTTP-сервер для собранного Vite `dist`.
- `src/index.css`, `package.json` и `package-lock.json` не изменялись.
## Проверка
- Статически проверены изменённые файлы и связи между карточками меню, активным гостем и корзиной.
- `docker-compose.yml` и `Dockerfile` физически присутствуют в финальном архиве.
- Полный `vite build` в этой среде не удалось выполнить: пакетные зависимости из `package-lock.json` не удалось восстановить через npm из-за недоступного registry/cache-пакета, поэтому результат сборки здесь не выдаётся за проверенный.
- Финальный архив не содержит `node_modules` и `dist`; зависимости и production-сборка должны создаваться в целевой среде.
## Docker runtime
- `docker-compose.yml` restored for the frontend container; Caddy is not containerized.
- `Dockerfile` restored as a multi-stage build: Node builds the Vite app, nginx serves the resulting static files.
- The app is published only on `127.0.0.1:8080`, so host-level Caddy can reverse-proxy to `http://127.0.0.1:8080` without exposing the app directly to the network.
- `nginx.conf` contains SPA fallback and a `/healthz` endpoint.
- `.dockerignore` excludes build/dependency artifacts from the Docker build context.