VEU.WathBody/1-docs/4-modules/m06-fit-import/readme.md

48 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# m06-fit-import — план работ (d-dev)
> Модуль: `Server.WatchBody.Import` (FitParser/TcxGpxParser/
> WorkoutImporter/ProgramPackageImporter/ImportService) + режим
> `--mode import` в единой точке входа CLI.
> Алгоритм: `std1\_rules\d\d-dev.md` (итерационная разработка по
> модулям). Требования: [module_reqs.md](module_reqs.md).
> Зависимости: m01 (репозитории, DONE), m02 (единая точка входа CLI —
> DONE), m03 (ProgramStore — создание версий пакета, DONE).
| Шаг | Что делаем | Статус |
|---|---|---|
| 0 | Модульные документы: module_reqs.md / readme.md / SKILL.md | ✅ 2026-10-18 |
| 1 | Список единиц (классы/методы/конфиг/тесты) | ✅ 2026-10-18 |
| 1.3 | **Пользователь!** утверждение списка | ⬜ |
| 2 | Спецификации: api_specs (facts-схема, сопоставление, пакет) | ✅ 2026-10-18 |
| 2.4 | **Пользователь!** утверждение спецификаций | ✅ 2026-10-18 |
| 3 | Реализация + тесты | ✅ 2026-10-18 (тесты Web 93/93, из них m06 — 12; Core 56/56; psql 123/123; CLI-смок --mode import пройден) |
| 3.4 | **Пользователь!** утверждение реализации (закрытие модуля) | ✅ 2026-10-18 |
| 4 | Завершение: план, примечания | ✅ 2026-10-18 — **Модуль завершён** (2026-10-18). Следующий по плану этапа 7 — m07-fit-fetch (итерация 2). |
Статусы: ⬜ не начат · 🔄 в работе · ✅ готов.
## Примечания по ходу работ
1. **SDK**: NuGet `Garmin.FIT.Sdk` 21.218.0, namespace `Dynastream.Fit`
(не `Garmin.Fit.*`); API потоковый: `Decode.IsFIT/CheckIntegrity/Read`
(Stream), события `MesgEvent` доставляют базовый `Mesg` — типы
конструируются из него по `Mesg.Num` (`new SessionMesg(mesg)`); у
`SetMesg` — `GetRepetitions` (не NumReps); `Encode` для .fit-фикстур
тестов.
2. **Errata З-35 (доведение)**: `program_select`/`program_get` не
возвращали `external_id` — rev. 2 обеих функций (+ DROP прежней
row-типной сигнатуры), маппинг в `ProgramRepository.Select/Get`,
синхронизированы func_specs и mock-колонки Core.Tests; psql-тесты
перегнаны — PASS.
3. **Errata m01**: `workout_insert` fit-полей не принимает (дизайн
db-m-8) — строка «только .fit» пишется Insert + Update (как sync,
errata m02).
4. **Устройство в .fit**: `garmin_product` у тестового файла декодируется
в `null`, фактическое устройство — числом в `product` (Fenix6sAsia =
3513) — `device` пишет идентификатор как есть.
5. `external_id` пакета уникален глобально (З-35): один пакет
(`program_id`) назначается одному атлету — повтор тому же атлету
даёт новую версию, повтор другому — UNIQUE-ошибку (файл остаётся,
лог; формат program-import-format.md §3.4 соблюдён).
6. `Sport` в TCX — атрибут `Activity[@Sport]`, не элемент.