m. MuskatGroupEN ↗

MuskatGroup / Продукты

Incredible Pizza

Полный исходный интерфейс сервиса заказа еды с каталогом, аккаунтом и историей заказов на Rust API.

ReactTypeScriptViteRustAxumSQLite
Обновлённый каталог Incredible Pizza с фотографиями товаров и навигацией по категориям

Задача

Сохранить полный исходный интерфейс Incredible Pizza и подключить его к самостоятельному Rust API. В демонстрации доступны семь категорий и 64 товара: пицца, суши, комбо, закуски, напитки, десерты и соусы. Интерфейс доступен на русском и английском языках по адресам /ru/ и /en/. Переключение языка сохраняет корзину и текущий раздел. Светлая и тёмная темы учитывают системные настройки и сохраняют выбор посетителя.

Сценарий

Посетитель регистрируется с демонстрационным кодом 1111, входит в аккаунт, настраивает размер пиццы, тесто и добавки, собирает корзину и оформляет доставку или самовывоз. Подтверждённый заказ появляется в личной истории; его можно повторить. Разные конфигурации одной пиццы остаются отдельными позициями.

Демонстрация не принимает реальные заказы, не списывает деньги и не отправляет письма. Для регистрации и оформления следует использовать вымышленные данные и отдельный тестовый пароль.

Модернизация

Полный исходный React frontend переведён с Create React App на Vite и TypeScript. Сохранены исходные страницы, стили, навигация, промоблоки и компоненты. Исправлены управление конфигуратором, корзина, оформление самовывоза, адаптивность карусели и меню аккаунта. Внешние моки истории и старые API-адреса заменены вызовами Rust backend на том же origin.

Все 64 карточки используют локальные фотографии с адаптивными WebP-версиями. Снимки сопоставлены с товарами Dodo Pizza и исходным ассортиментом роллов; происхождение файлов описано в репозитории. Четыре архивные позиции с фотографиями похожих блюд явно обозначены. Обновлены первый экран, типографика, карточки, категории и плавающая мобильная корзина.

Архитектура

Backend использует Rust, Axum, Tokio и SQLite через SQLx. Пароли хешируются Argon2; сессии хранятся в HttpOnly cookie, в базе сохраняются хеши токенов. История доступна только владельцу аккаунта.

Сервер проверяет ID и совместимость вариантов, пересчитывает цену в целых копейках и сохраняет снимок заказа транзакционно. Idempotency-Key защищает от повторного создания при повторной отправке. Миграции и повторяемое заполнение каталога выполняются до запуска сервиса. Демоаккаунты и заказы удаляются по сроку хранения 24 часа.

Проверка

Интеграционные тесты проверяют каталог, расчёты, регистрацию и сессии, изоляцию истории, идемпотентность и очистку. Браузерные тесты проходят регистрацию, конфигуратор, оформление, историю, повтор заказа и повторный вход на мобильном и настольном экранах с настоящим Rust API и временной SQLite.

Публичная ссылка появится после размещения на отдельном поддомене.

Интерфейс продукта

Открыть демо ↗