3.2 KiB
3.2 KiB
m07-fit-fetch — план работ (d-dev)
Модуль:
Server.WatchBody.Fetch(GarminClient + FitFetcher) и режим--mode fetch— забор .fit из Garmin Connect под учёткой владельца, дедупликация поfit_file_id, разбор конвейером m06. Алгоритм:std1\_rules\d\d-dev.md. Требования: module_reqs.md. Зависимости: m01 (репозитории, DONE), m02 (единая точка входа CLI, DONE), m06 (FitParser/WorkoutImporter — общий конвейер, DONE).
| Шаг | Что делаем | Статус |
|---|---|---|
| 0 | Модульные документы: module_reqs.md / readme.md / SKILL.md | ✅ 2026-10-18 |
| 1 | Список единиц (классы/методы/конфиг/тесты) | ✅ 2026-10-18 |
| 1.3 | Пользователь! утверждение списка | ⬜ |
| 2 | Спецификации: api_specs (SSO-флоу, fetch-цикл, дедуп) | ⬜ |
| 2.4 | Пользователь! утверждение спецификаций | ⬜ |
| 3 | Реализация + тесты | ⬜ |
| 3.4 | Пользователь! утверждение реализации (закрытие модуля) | ✅ 2026-10-18 |
| 4 | Завершение: план, примечания | ✅ 2026-10-18 — Модуль завершён (2026-10-18). Итерация 2 (m04–m07) завершена. Следующий по плану этапа 7 — m08-admin-web (итерация 3). |
Статусы: ⬜ не начат · 🔄 в работе · ✅ готов.
Примечания по ходу работ
- Прототип: реальный логин Garmin против живого сервиса не
автоматизирован (tech-req чек-лист «Логин Garmin Connect — итерация
2»);
GarminClientреализует флоуgarminconnectполностью (embed → csrf → signin → ticket → OAuth1-HMAC-SHA1 → Bearer), но против Garmin Connect валидируется только вручную — при блокировке fallback = папка импорта (m06, О-1-А). Тесты —FakeGarminHandlerс теми же маршрутами и настоящими .fit-байтами (энкодер SDK). - Куки:
CookieContainerнаполняется изSet-Cookieвручную (редиректы не следуются автоматически — ticket читается из Location/тела). - Дедуп: рубеж 1 — файл-кэш
{activityId}.fit(без сети); рубеж 2 —fit_file_idв БД до записи (дубль → файл не кэшируется). Тест «дубль» даёт skipped=2 (кэш + дубль) — корректно. - Битый download →
{activityId}.bad(кэш не занимает, повторный fetch скачает заново). - Конфиг
Garmin.*— читается вServerConfig; в appsettings умолчания пустые (🛡 секреты только в конфиге владельца).