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