разработка 1,282 просмотров

Фича, которая была не нужна... пока не появились роллы

Альбом: 2 фото
Фото 1
Увеличить
1 / 2
Фото 2
Увеличить
2 / 2
Фича, которая была не нужна... пока не появились роллы 🍣

Гайз, как вы знаете, один из наших активных проектов — система автоматизации для общепита. Это полноценный бэкэнд 🖥️, кассовый клиент (POS) для терминалов 💸, прием онлайн-заказов с сайта 🌐 и т.д. Проект уже вполне боевой и активно работает в реальной доставке с января этого года.

Сегодня выкатили небольшое, но важное обновление. Оно касается фичи, которая казалась очевидной, но в которой просто не было реальной бизнес-потребности — множители для модификаторов (топпингов, соусов).

Раньше можно было, например, к пицце 🍕 добавить «доп. пармезан». Но нельзя было добавить «x3 пармезана». Зачем? Никто и не просил.

А потом в меню появились роллы и, что важнее, их сеты. И, как показала практика, некоторые клиенты буквально *заливаются* соевым соусом и имбирем 🍶. Стандартной порции им катастрофически мало, и они готовы платить за x3, x4, x5 соуса. Так и родилась задача.

Собственно, задачка «просто добавить +/- на клиенте» потянула за собой приятный рефакторинг на бэке. Просто добавить поле quantity в связующую таблицу было нельзя по двум причинам:

Uno) Изначально в БД был составной PRIMARY KEY. Он в принципе не давал добавить один и тот же модификатор к одной позиции дважды.

Dos) Нельзя просто хранить quantity и брать цену из справочника modifiers. Если завтра админ поднимет цену на «Пармезан», вся фин. отчетность по старым заказам "поплывет".

Пришлось менять схему таблиц:
«Заморозить» данные: В эту же таблицу добавлены поля name, unit_price и total_price. Теперь в момент заказа копируем цену и название из справочника и сохраняем их. Старые заказы защищены от будущих изменений цен 🧊
- И разделить DTO ✂️

Ну и вот как это теперь выглядит на кассовом клиенте (SwiftUI). Простой и понятный Stepper вместо обычного чекбокса.
#Java #SwiftUI #Backend #POS #Database

Понравился пост?

Обсуди его в Telegram-канале!

Обсуждение

Комментарии доступны через Telegram. Для участия в обсуждении нужен аккаунт Telegram.

Поделиться: Telegram