Правила — в базе
Изоляция, лимит касс и защита от дублей проверяются на уровне базы данных: их не обойти, даже если в приложении ошибка.
04 / 04Интеграция учёта и касс
Портал для розничной сети: товары и цены из нескольких учётных записей МойСклад попадают во все кассы, а чеки возвращаются в одно место для отчётов.
У сети несколько учётных записей МойСклад. Кассы при этом должны продавать одни и те же товары по одним ценам, а владельцу нужны все чеки в одном месте.
МойСклад отвечает не чаще трёх раз в секунду, кассы иногда теряют связь — и ни один чек не должен ни пропасть, ни задвоиться.
Данные каждой учётной записи отделены в самой базе: ошибка в коде не покажет одной компании товары или чеки другой.
Товар меняется в учёте, портал забирает изменения и раздаёт кассам. Источник правды один, расхождений нет.
Запросы выстраиваются в очередь не быстрее трёх в секунду — лимит соблюдается при любом числе касс.
Касса отправляет чеки пакетами и может повторить отправку после обрыва связи: повтор не создаёт второй чек.
Предел держит сама база, а не только интерфейс: две одновременные регистрации не проскочат вместе.
Изоляция, лимит касс и защита от дублей проверяются на уровне базы данных: их не обойти, даже если в приложении ошибка.
Связь у касс рвётся, поэтому каждый запрос можно безопасно повторить. Это дешевле, чем разбирать пропавшие чеки.
Прежде чем писать код, свели ТЗ, схему базы и API для касс и убрали расхождения между ними.
Похожая задача? Расскажите, что мешает работать, — ответим, как это собрать, сколько займёт и во сколько обойдётся.
Обсудить проект