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