Статус: Очередь операций реализована в исходниках; проверка базы, переводов и повторных платежей ещё открыта.
Прогресс персонажа меняется не только при выходе из игры. Награда за задание, перевод валюты, покупка, вход с другого устройства и автосохранение могут произойти почти одновременно. Если такие операции записывают старый снимок аккаунта поверх нового, возникает риск несогласованного баланса или потерянного изменения. В проекте не была воспроизведена конкретная потеря награды, но аудит нашёл условия для конфликтующих записей.
Очередь для одного аккаунта
Добавлена последовательная очередь чтения и записи по логину. Она охватывает получение наград, полное сохранение, отключение, вход и действия с внутриигровой валютой. Для переводов между аккаунтами применяется упорядоченная работа с обеими сторонами. Сервер должен закончить более раннее изменение до того, как поздняя операция увидит баланс и примет решение.
Полный снимок аккаунта больше не перезаписывает отдельные колонки валюты и наград. При повторном сохранении недельного прогресса проверяется актуальная неделя, чтобы старый ответ не откатил уже начавшийся новый период. Для ошибочных ответов базы добавлены проверки: при неудачном чтении операция прекращается до изменения данных.
Где работа ещё продолжается
Часть защиты повторного начисления подтверждена только в памяти работающего процесса. Если сервер перезапустится между подтверждением операции в базе и отметкой в памяти, долговечная защита от повторного начисления пока не доказана. Это отдельный открытый пункт, который нельзя закрыть одними тестами очереди.
Игровая приёмка
На изолированном аккаунте предстоит проверить быстрые повторные нажатия получения награды, переводы, онлайн- и офлайн-получателей, выход и немедленный повторный вход, а затем сверить состояние игры и базы. Так мы проверим не только правильный порядок кода, но и фактическую сохранность прогресса.