VEU.WathBody/1-docs/4-modules/m06-fit-import/api_specs/04-import-service-cli.md

3.0 KiB
Raw Blame History

Спецификация 04: ImportService и режим --mode import

Источники: Ф-8.3, requirements 2.3 (коды возврата), tech-req 4.2 (Import.Dir/Import.ArchiveDir — создание при старте, недоступность фатальна), решение гейта 1.3 (атрибуция по подпапке).

1. Сигнатура

public (int Processed, int Failed) Run(string importDir, string archiveDir);

2. Алгоритм

  1. Каталоги: importDir не существует → 0/0 (нет новых файлов — успех); archiveDir создаётся при старте (недоступность — исключение → код 1).
  2. Обход — только подпапки importDir (атрибуция атлету: имя папки == athlete.name, 🛡1; athlete не найден → все файлы папки — сбой с логом «атлет не найден»). Файлы в корне importDir — пропуск с логом (решение гейта 1.3).
  3. Файл → маршрутизация по расширению:
    • .fit → FitParser + WorkoutImporter.Import;
    • .tcx, .gpx → TcxGpxParser + тот же импорт;
    • program-import.json → ProgramPackageImporter.Import;
    • прочие → пропуск с логом (не файл пакета — не считается сбоем).
  4. Успех → перемещение в archiveDir\<имя атлета>\; конфликт имён — суффикс -HHmmss. Сбой (любое исключение файла) → файл остаётся, лог с текстом исключения, Failed++ (🛡4 — пакет продолжается).
  5. Возврат (Processed, Failed).

3. CLI (--mode import в Program.cs Web)

  • --mode import → ServerConfig.Load + проверка конфигурации: Db.ConnectionString обязателен, Import.Dir создаётся при старте (недоступность → код 1); Import.ArchiveDir создаётся всегда;
  • вызов ImportService.Run → вывод в stdout (файлы/итог), код: Failed == 0 → 0, иначе 2 (requirements 2.3);
  • serve-валидация (Api.Key и пр.) в режиме import не выполняется — import работает по своей конфигурации.

4. Конфиг (ServerConfig)

Параметр Умолчание Семантика
Import.Dir data\import (относительно exe) папка импорта (подпапки-атлеты)
Import.ArchiveDir data\import_done папка обработанных

5. Инварианты 🛡

  • сбой одного файла не останавливает пакет;
  • без ключей/паролей в логах (З-2, З-6);
  • изоляция: файлы папки обрабатываются только на атлета папки.