разработка
•
•
1,282 просмотров
Фича, которая была не нужна... пока не появились роллы
Фича, которая была не нужна... пока не появились роллы 🍣
Гайз, как вы знаете, один из наших активных проектов — система автоматизации для общепита. Это полноценный бэкэнд 🖥️, кассовый клиент (POS) для терминалов 💸, прием онлайн-заказов с сайта 🌐 и т.д. Проект уже вполне боевой и активно работает в реальной доставке с января этого года.
Сегодня выкатили небольшое, но важное обновление. Оно касается фичи, которая казалась очевидной, но в которой просто не было реальной бизнес-потребности — множители для модификаторов (топпингов, соусов).
Раньше можно было, например, к пицце 🍕 добавить «доп. пармезан». Но нельзя было добавить «x3 пармезана». Зачем? Никто и не просил.
А потом в меню появились роллы и, что важнее, их сеты. И, как показала практика, некоторые клиенты буквально *заливаются* соевым соусом и имбирем 🍶. Стандартной порции им катастрофически мало, и они готовы платить за x3, x4, x5 соуса. Так и родилась задача.
Собственно, задачка «просто добавить +/- на клиенте» потянула за собой приятный рефакторинг на бэке. Просто добавить поле quantity в связующую таблицу было нельзя по двум причинам:
Uno) Изначально в БД был составной PRIMARY KEY. Он в принципе не давал добавить один и тот же модификатор к одной позиции дважды.
Dos) Нельзя просто хранить quantity и брать цену из справочника modifiers. Если завтра админ поднимет цену на «Пармезан», вся фин. отчетность по старым заказам "поплывет".
Пришлось менять схему таблиц:
«Заморозить» данные: В эту же таблицу добавлены поля name, unit_price и total_price. Теперь в момент заказа копируем цену и название из справочника и сохраняем их. Старые заказы защищены от будущих изменений цен 🧊
- И разделить DTO ✂️
Ну и вот как это теперь выглядит на кассовом клиенте (SwiftUI). Простой и понятный Stepper вместо обычного чекбокса.
Гайз, как вы знаете, один из наших активных проектов — система автоматизации для общепита. Это полноценный бэкэнд 🖥️, кассовый клиент (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