Trainer App

Приложение тренера продолжает работу, когда интернет пропал

ProGym сохраняет ближайшее расписание и состав групп на устройстве тренера. Отметки посещений получают постоянный ключ, ждут восстановления сети и применяются в Taska Core ровно один раз.

01

Что доступно тренеру без связи

Офлайн-режим Trainer App рассчитан на реальную смену в клубе, где мобильная сеть нестабильна, Wi-Fi перегружен или отдельный зал находится вне уверенного покрытия. После успешного входа приложение сохраняет ближайшие четырнадцать дней назначенного тренеру расписания. Для каждого занятия остаются время, вместимость, идентификатор записи, имя участника и текущий статус посещения. Этого достаточно, чтобы открыть нужную группу и провести перекличку.

Снимок расписания хранится до семидесяти двух часов и привязан одновременно к организации и пользователю. Если один тренер передаст устройство другому, данные прежнего профиля не станут общей локальной базой клуба. При выходе приложение удаляет identity, расписание и очередь отметок для всех сохранённых филиалов этого пользователя. Первый вход всегда требует Telegram и работающего соединения.

  • расписание назначенного тренера на ближайшие 14 дней;
  • состав группы без телефонов и расширенных карточек;
  • статусы пришёл, опоздал и отсутствовал;
  • понятный индикатор online, offline, pending и failed;
  • ручной повтор отправки после восстановления сети.

02

Как отметка не превращается в дубль

Каждая отметка сначала сохраняется на устройстве и получает уникальный Idempotency-Key. Этот же ключ используется для первой онлайн-отправки и любого повтора. Если сервер успел применить действие, а ответ потерялся вместе с сетью, следующая попытка возвращает исходный результат. Дополнительное списание занятия, второй audit event и новое время check-in не создаются.

Taska Core хранит отдельный append-only receipt со ссылкой на запись, статусом, комментарием, автором и точным снимком ответа. Два конкурентных запроса одного действия сериализуются внутри организации. Повтор ключа с другим занятием или статусом возвращает конфликт. Историю нельзя переписать через UPDATE или DELETE, защита действует на уровне PostgreSQL.

Если тренер меняет решение до синхронизации, локальная очередь объединяет действия по одной записи и оставляет актуальный статус. После подключения приложение отправляет очередь последовательно. Ошибка связи сохраняет действие с тем же ключом, а бизнес-ошибка показывает понятное сообщение и возвращает серверное состояние группы.

03

Какие данные остаются на телефоне

ProGym использует минимизированный offline snapshot. В него не попадают телефоны клиентов, платежи, медицинские измерения, заметки менеджеров, документы, адреса и история общения. Тренеру доступны только данные, которые нужны для ближайшего занятия. Полный профиль, фитнес-тесты и программы открываются после восстановления связи и повторной проверки прав.

Основное хранилище работает через IndexedDB. Если браузер ограничивает его, приложение использует localStorage как контролируемый fallback. Сроки жизни одинаковы, ключи включают организацию и пользователя, а старые fallback-записи удаляются при успешной работе основного хранилища. Выход очищает оба варианта, поэтому временный технический fallback не превращается в бесконечную копию данных.

  • identity действует до 12 часов;
  • расписание действует до 72 часов;
  • клиент представлен именем и внутренним ID;
  • очередь принадлежит конкретному пользователю и организации;
  • logout очищает основной cache и fallback.

04

Как тренер видит состояние синхронизации

В верхней части рабочего места расположен постоянный статус. Зелёное состояние подтверждает актуальные данные, жёлтое сообщает о работе по сохранённому расписанию, красное выделяет отметки, которым нужен повтор. Рядом указаны время сохранения и длина очереди. Тренеру не приходится угадывать, ушло действие на сервер или осталось только на телефоне.

В составе группы pending-отметка сразу меняет активную кнопку и получает подпись «Сохранено на устройстве». Failed-состояние показывает необходимость повторной отправки. Кнопки имеют высоту не меньше 44 пикселей, поэтому ими удобно пользоваться одной рукой. Интерфейс проверен на ширине 390 пикселей, поддерживает русский, узбекский и английский языки.

05

Что проверить на демонстрации

Для приёмки откройте Trainer App через Telegram, загрузите занятие и отключите сеть. Отметьте нескольких участников разными статусами, перезагрузите страницу и убедитесь, что очередь и выбранные состояния сохранились. Затем включите сеть и проверьте исчезновение очереди, серверный roster, audit и баланс занятий.

Отдельный сценарий имитирует потерянный ответ: сервер применяет отметку, клиент повторяет её с прежним ключом. В истории должен остаться один receipt и один результат. После этого отправьте тот же ключ с другим статусом и получите conflict. Завершите проверку выходом из аккаунта и убедитесь, что сохранённое расписание больше не открывается без нового входа.

  • перезагрузка страницы в offline-режиме;
  • несколько отметок и изменение статуса до sync;
  • автоматическая и ручная синхронизация;
  • exact replay потерянного ответа;
  • очистка данных после logout.

Демонстрация

Проверьте сценарии на примере своего клуба

Подготовим роли, филиал, расписание и путь клиента. Покажем работающие функции в системе.

Покажем CRM, расписание, кассу, СКУД и приложения на сценарии вашего клуба.