SGH GYMHUB — серверное веб-приложение (браузерный клиент) для учёта абонементов и тренировок в небольших студиях и у персональных тренеров: остаток оплаченных занятий, отметки посещений, заморозка, личный кабинет клиента, опциональный калькулятор КБЖУ, планы тренировок и справочник упражнений.
Функциональные характеристики
Роли и доступ
- Тренер входит по email и одноразовому коду TOTP (библиотека PyOTP, приложение-аутентификатор на стороне пользователя). Пароль в системе не хранится и не запрашивается.
- Первичное создание владельца (пустая таблица тренеров): мастер-настройка /auth/trainer-setup; далее — вход /auth/trainer-login, публичная регистрация ещё одного владельца студии — /auth/register.
- Роль superadmin (владелец студии) и приглашённые trainer: приглашение по одноразовой ссылке /auth/invite/, режим оплаты подписки для приглашённого — «сам» или «спонсор» (владелец).
- После успешного TOTP тренеру выдаётся device_token для автоматического входа с того же браузера (эндпоинт /auth/trainer-auto-login).
- Ограничение числа неуспешных попыток ввода TOTP с одного IP: модуль web/security.py (список блокировок в blocked_ips.json рядом с приложением).
Клиент
- Вход по телефону и 6-значному PIN, который генерирует тренер; PIN одноразовый, хранится как хеш bcrypt, срок действия окна в логике сервиса — 30 минут (константа в web/services.py).
- Альтернатива: переход по одноразовой QR-ссылке /auth/qr/; токен в БД помечается использованным, срок жизни записи — 30 минут.
- Сохранение входа клиента: токены устройств в таблице сессий клиента, отзыв отдельной сессии или всех — из кабинета тренера.
Учёт тренировок и клиенты
- У клиента ведётся остаток оплаченных занятий (remaining_workouts), история операций в workout_transactions, факты посещений в workouts.
- Тренер: отметить одно занятие, начислить пакет занятий, отменить последнюю операцию, заморозка / снятие заморозки, мягкое удаление клиента, просмотр статистики по месяцам.
- Клиент в ЛК: остаток, календарь посещений по месяцам, текст прайс-листа своего тренера.
КБЖУ
- Тренер включает или выключает блок КБЖУ для конкретного клиента.
- Клиент вводит вес, рост, возраст, пол и уровень активности; расчёт — формула Mifflin–St Jeor и алгоритм распределения БЖУ (модуль web/kbju_calc.py).
Планы тренировок
- Справочник упражнений с типом подхода: reps или time; при первом открытии может подставляться встроенный список-заготовка.
- Составление планов по дням, назначение плана клиенту; в ЛК клиента отображается план на текущую дату.
Подписка тренера на сервис
- У нового тренера создаётся пробная подписка (в течение 30 суток) при отсутствии активной.
- При истечении подписки доступ к кабинету тренера перенаправляется на страницу продления; эндпоинт оплаты /auth/pay-subscription.
- Если в конфигурации включён payment_emulation: true, подписка продлевается без реального платежа. В настоящее время производится период тестовой эксплуатации и бесплатного распространения, без взымания оплаты.
Прочее
- Статическая страница реквизитов правообладателя: /requisites (данные из JSON-конфигурации).
- Публичные разделы документации на сайте: /documentation, /pricing, /expert-review.