66 lines
6.4 KiB
Markdown
66 lines
6.4 KiB
Markdown
# Аудит и изменения проекта НЕОН
|
||
|
||
## Что проверено
|
||
|
||
- Исходная структура проекта, `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.
|