Изменение vision 1.2: веб — админ-консоль владельца (вход по логину/паролю); просмотр всех тренировок, динамика, корректировка программ, управление атлетами; требования — черновик 3
This commit is contained in:
parent
acfef60245
commit
0b2c68614c
|
|
@ -6,7 +6,7 @@
|
|||
> (`..\..\Техническое задание.md`), дизайн LLM-планирования (разд. 2–3,
|
||||
> 6–8, 11 — шаг 1); изменение vision 1.1 (2026-10-17) — несколько
|
||||
> атлетов на сервере, разные модели часов.
|
||||
> Версия: черновик 2 (2026-10-17). Формулировки — проверяемые (d-req-7).
|
||||
> Версия: черновик 3 (2026-10-17). Формулировки — проверяемые (d-req-7).
|
||||
|
||||
## 1. Назначение и границы
|
||||
|
||||
|
|
@ -93,7 +93,8 @@ Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных перен
|
|||
| Параметр | Семантика | Умолчание |
|
||||
|---|---|---|
|
||||
| `Api.Key` | статический API-ключ по умолчанию (владелец) | — (обязательный) |
|
||||
| `Api.Athletes` | список атлетов: `{ name, apiKey }` — ключ идентифицирует атлета (изменение vision 1.1; способ заведения — открытый вопрос 9) | — (минимум владелец) |
|
||||
| `Api.Athletes` | список атлетов: `{ name, apiKey }` — ключ идентифицирует атлета (изменение vision 1.1; управление — через веб-консоль, Ф-9.1) | — (минимум владелец) |
|
||||
| `Admin.Login / Admin.PasswordHash` | учётные данные владельца для входа в веб-консоль (пароль — только хэш, изменение vision 1.2) | — (обязательные) |
|
||||
| `Api.Port` | порт HTTPS | `8443` |
|
||||
| `Db.ConnectionString` | подключение к PostgreSQL | — (обязательный) |
|
||||
| `Garmin.Login / Garmin.Password` | учётная запись Garmin Connect (решение — опросник 4.3) | — (обязателен для `fetch`) |
|
||||
|
|
@ -268,16 +269,28 @@ Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных перен
|
|||
6. 🛡 API пишет факт-данные только из sync и импорта; ручного ввода
|
||||
на сервере нет.
|
||||
|
||||
### Ф-9. Веб-интерфейс сервера
|
||||
### Ф-9. Веб-интерфейс сервера — административная консоль владельца
|
||||
|
||||
1. Страница истории: таблица тренировок (дата, длительность, средний
|
||||
пульс, подходы, упражнений), сортировка по дате, пагинация;
|
||||
владелец (ключ `Api.Key`) видит все данные, атлет — только свои;
|
||||
фильтр по атлету для владельца (изменение vision 1.1).
|
||||
2. Карточка тренировки: подходы, пульс-тренд, соответствие программе
|
||||
(план/факт — Ф-11.4).
|
||||
3. Выгрузка CSV текущей выборки (КУ-4). Доступ — по ключу атлета
|
||||
(форма входа — ввод ключа; открытый вопрос 6).
|
||||
🛡 Доступ в веб — только для владельца, вход по логину и паролю
|
||||
(`Admin.Login` / `Admin.PasswordHash` из настроек; открытый вопрос 6
|
||||
закрыт); атлеты работают только через телефон (изменение vision 1.2).
|
||||
Разделы консоли:
|
||||
|
||||
1. **Атлеты** (управление, открытый вопрос 9 закрыт этим решением):
|
||||
список, добавление атлета (имя + генерация API-ключа), смена ключа,
|
||||
блокировка (заблокированный ключ → `401` на API).
|
||||
2. **Тренировки**: таблица по всем атлетам с фильтром по атлету и дате
|
||||
(дата, длительность, средний пульс, подходы, упражнений), сортировка,
|
||||
пагинация; карточка тренировки: подходы, пульс-тренд, отчёт план/факт
|
||||
(Ф-11.4); выгрузка CSV текущей выборки (КУ-4).
|
||||
3. **Программы**: выбор атлета → список версий (статусы, автор, даты);
|
||||
создание и правка версий `draft`; смена активной версии (Ф-10.3);
|
||||
просмотр предложений правил (Ф-12.3) — применение предложения
|
||||
из консоли помечает версию `author=admin`.
|
||||
4. **Метрики и динамика**: по атлету и периоду — adherence, тоннаж
|
||||
по группам, динамика 1ПМ и рабочего веса по упражнениям (графики
|
||||
по неделям из `workout_metrics`); у каждой тренировки карточки —
|
||||
место в тренде (лучше/хуже предыдущей).
|
||||
|
||||
### Ф-10. Программы тренировок (сервер + телефон)
|
||||
|
||||
|
|
@ -287,8 +300,10 @@ Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных перен
|
|||
повторения, `target_rpe`, отдых). Хранение — таблица `programs`
|
||||
(PostgreSQL); каждая версия неизменяема (🛡). 🛡 Программы принадлежат
|
||||
атлету — у каждого свои (изменение vision 1.1).
|
||||
2. В v1 создание/правка версии — вручную в приложении на телефоне
|
||||
(редактор программы) с отправкой на сервер; `author=user`.
|
||||
2. В v1 создание/правка версии — на телефоне (редактор программы
|
||||
атлета, `author=user`) или в административной консоли (владелец,
|
||||
`author=admin`, изменение vision 1.2); отправка на сервер — при
|
||||
синхронизации телефона либо сразу из консоли.
|
||||
3. Ровно одна версия в статусе `active` (🛡); смена активной — явным
|
||||
действием пользователя; выполненные тренировки ссылаются на версию,
|
||||
которая была активна на их начало (история не «поплывёт»).
|
||||
|
|
@ -323,8 +338,9 @@ Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных перен
|
|||
- иначе (частичное выполнение) — вес без изменения.
|
||||
3. Правила применяются только к `active` версии; результат —
|
||||
предложение следующей версии программы со статусом `draft`
|
||||
(`author=rules`), показывается в приложении диффом; применение —
|
||||
подтверждением пользователя (Ф-10.3). 🛡 Автоматической смены
|
||||
(`author=rules`), показывается атлету в приложении диффом;
|
||||
применение — подтверждением атлета на телефоне или владельцем
|
||||
в консоли (Ф-9.3, изменение vision 1.2). 🛡 Автоматической смены
|
||||
активной версии нет (vision 2.4).
|
||||
4. Делоад: если `Deload.MaxWeeks` недель подряд без делоада, правило
|
||||
предлагает делоад-версию (объём −40–50 %) — тем же механизмом
|
||||
|
|
@ -356,8 +372,8 @@ Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных перен
|
|||
- 🛡 **Изоляция атлетов:** API-ключ идентифицирует атлета; ни API,
|
||||
ни веб не отдают атлету чужие данные; метрики, правила и программы
|
||||
считаются по атлетам независимо (изменение vision 1.1).
|
||||
- 🛡 **Тайны:** пароль Garmin и API-ключи — только в настройках;
|
||||
в логах их нет.
|
||||
- 🛡 **Тайны:** пароль Garmin, API-ключи и хэш пароля владельца — только
|
||||
в настройках/БД; в логах их нет.
|
||||
- 🛡 **Безопасность нагрузки:** автоматические изменения программы
|
||||
ограничены лимитами правил (Ф-12.2, Ф-12.4); смена активной версии —
|
||||
только вручную (БР-5, vision 2.4).
|
||||
|
|
@ -394,9 +410,9 @@ Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных перен
|
|||
| 3 | Канал телефон ↔ часы | Connect IQ companion (Communications): что передаётся реально (пульс live, зоны, таймер отдыха, заряд); ограничения канала определяют Ф-2.4, Ф-3.2, Ф-6.3. Прототип на шаге 4 | Закрыт шагом 4 |
|
||||
| 4 | Расписание `fetch` | cron/systemd-таймер на сервере против внутреннего планировщика; предпочтителен внешний планировщик | Закрыт шагом 5 |
|
||||
| 5 | Способ сопоставления тренировок телефон ↔ .fit | Окно ± 15 минут (Ф-8.4) против точной метки начала из sync | ✅ Закрыт в этом документе (раздел 4, Ф-8.4) |
|
||||
| 6 | Доступ в веб-интерфейс | Ввод ключа в форме против Basic Auth; личное использование — проще форма с ключом | Закрыт шагом 5 |
|
||||
| 6 | Доступ в веб-интерфейс | ✅ Закрыт изменением vision 1.2: веб — административная консоль владельца, вход по логину и паролю (раздел 4, Ф-9); атлеты — только телефон | ✅ Закрыт (изменение vision 1.2) |
|
||||
| 7 | Формула оценочного 1ПМ | Эпли против Бжицки (разд. 4 дизайна LLM-планирования); различие ~5 % на малых повторениях | Закрыт шагом 5 |
|
||||
| 8 | Перечень моделей часов v1 | Якорь — Fenix 6 (изменение vision 1.1); каждая модель — конфигурация сборки (экран, память). Кандидаты: модели с профилем «Силовая» и Connect IQ 4+ у участников; список фиксируется по фактическому парку устройств | Закрыт шагом 4 |
|
||||
| 9 | Способ заведения атлетов | Список `{name, apiKey}` в `appsettings.json` (просто, но правка — с перезапуском) против раздела веб-администрирования владельца (удобнее, дороже). Для v1 — конфиг с последующим переносом в веб без смены схемы БД | Закрыт шагом 5 |
|
||||
| 9 | Способ заведения атлетов | ✅ Закрыт изменением vision 1.2: раздел «Атлеты» веб-консоли владельца (Ф-9.1) — имя + генерация ключа, смена ключа, блокировка; стартовые данные владельца — в конфиге | ✅ Закрыт (изменение vision 1.2) |
|
||||
| 10 | Источник .fit для атлетов без учётки владельца | `fetch` идёт под учётной записью владельца (опросник 4.3); другие атлеты: (а) делят доступ к своему Garmin (передача файла в папку импорта), (б) свой экземпляр учётки в конфиге, (в) только ручной импорт. Кандидат для v1 — (в) папка импорта | Закрыт шагом 5 |
|
||||
| 11 | Общий справочник упражнений | Сейчас библиотека у каждого атлета своя (Ф-4.4); общий справочник + личные дополнения — кандидат v2 (дубли при малом числе атлетов не критичны) | Открыт (до v2) |
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
# Vision: Феникс 6X — контроль силовых тренировок (телефон + Garmin Fenix 6 + личный сервер)
|
||||
|
||||
> Версия 1.1 — **УТВЕРЖДЕНО** (2026-10-17; вопросы опросника 4.1–4.7
|
||||
> отвечены, ответы применены; утверждение — 2026-10-17).
|
||||
> Изменение 1.1 (указание пользователя, 2026-10-17): серверная часть
|
||||
> Версия 1.2 — **УТВЕРЖДЕНО** (2026-10-17; вопросы опросника 4.1–4.7
|
||||
> отвечены, ответы применены; утверждение — 2026-10-17; изменения
|
||||
> 1.1, 1.2 — указания пользователя от 2026-10-17).
|
||||
> Изменение 1.1: серверная часть
|
||||
> поддерживает нескольких атлетов — у каждого свои программы, профиль
|
||||
> и данные, с собственных телефона и часов (пп. 2.2, 2.4, 3.1);
|
||||
> саморегистрации нет — учётные записи и API-ключи создаёт владелец
|
||||
|
|
@ -10,6 +11,11 @@
|
|||
> один атлет); часы поддерживаются различные: одно поле данных
|
||||
> (Connect IQ) собирается под разные модели Garmin, серверу источник
|
||||
> .fit безразличен (пп. 2.2, 2.4).
|
||||
> Изменение 1.2: веб-интерфейс сервера — административная консоль
|
||||
> владельца: просмотр тренировок и отчётов всех атлетов, корректировка
|
||||
> программ (версии, смена активной), управление атлетами (Ф-9, п. 2.2);
|
||||
> атлеты смотрят свои данные только на телефоне — веб-доступа для них
|
||||
> нет.
|
||||
> Источник идеи: техническое задание
|
||||
> «Феникс 6X» (Garmin Edition) от 17.10.2026
|
||||
> ([Техническое задание.md](../../Техническое%20задание.md)); требование
|
||||
|
|
@ -267,8 +273,12 @@ Garmin, наш продукт фиксирует результаты без р
|
|||
парсинг FIT (Session, Lap, Record, Set — Garmin FIT SDK), сохранение
|
||||
в собственную БД; REST API со статическим ключом;
|
||||
импорт FIT/TCX/GPX как fallback (документ форматов).
|
||||
- **Ф-9. Веб-интерфейс сервера** — таблица истории тренировок,
|
||||
выгрузка в CSV.
|
||||
- **Ф-9. Веб-интерфейс сервера** — административная консоль владельца
|
||||
(изменение 1.2): просмотр тренировок всех атлетов (таблица,
|
||||
карточка, план/факт) и метрик, выгрузка в CSV; корректировка
|
||||
программ — создание и правка версий, смена активной; управление
|
||||
атлетами — заведение учётных записей и ключей. Атлеты работают
|
||||
только через телефон.
|
||||
- **Ф-10. Программа тренировок** — программа как версионированный
|
||||
JSON-документ (недели → тренировки → упражнения по ID библиотеки →
|
||||
подходы-план: вес, повторения, RPE, отдых); версии неизменяемы,
|
||||
|
|
|
|||
Loading…
Reference in New Issue