Files
enduro-trails/docs/work-items/ET-006/08-data-requirements.md

4.9 KiB
Raw Blame History

type, work_item_id, version, status, created_at, authors
type work_item_id version status created_at authors
data-requirements ET-006 1 approved 2026-05-22
agent:architect

Data Requirements — ET-006

1. Сводка: персистентных данных нет

ET-006 не вводит серверного хранения. Все данные GPX-треков живут только в памяти браузера на время сессии (BRD §3 «Out of scope», TRZ NF-04).

Аспект Решение
Схема БД (SQLite/Spatialite) без изменений
Миграции (migrations/) нет
Серверное хранение треков нет
localStorage / sessionStorage не используется (объём данных велик)
Время жизни данных сессия; при перезагрузке страницы — потеря

2. Входные данные

  • Формат: GPX 1.1, namespace http://www.topografix.com/GPX/1/1 (с fallback на парсинг без namespace — TRZ REQ-F-02, тест U-08).
  • Источник: локальный файл, выбранный пользователем (<input type="file" accept=".gpx" multiple>).
  • Ограничение размера: ≤ 50 МБ на файл (TRZ REQ-F-03).
  • Извлекаемые сущности: <trk> / <trkseg> / <trkpt>, <wpt>, <rte> (трактуется как трек).

3. Внутренняя модель (in-memory)

Каноническая модель — window.gpxTracks (массив загруженных файлов), определена в TRZ §4. Владеет ею gpx.js (ADR-002):

window.gpxTracks = [
  {
    id: 'gpx-<timestamp>',          // уникальный ID
    filename: 'morning_ride',        // имя файла без расширения
    color: '#e6194b',                // цвет из палитры (8 цветов, цикл)
    tracks: [
      {
        name: 'Morning Ride',
        points: [[lon, lat, ele, time], ...],
        stats: { distanceKm, elevGain, elevLoss, eleMin, eleMax }
      }
    ],
    waypoints: [ { lon, lat, name, ele } ],
    sourceId: 'gpx-source-<timestamp>',
    layerId: 'gpx-layer-<timestamp>',
    waypointLayerId: 'gpx-wpt-<timestamp>'
  }
];

Замечания для разработки:

  • ele / time опциональны. При отсутствии <ele>ele = null, поля статистики высот = null (TRZ REQ-F-11, тесты U-05, U-14).
  • window.gpxTracks — единственный источник правды; объекты карты (source / layer / маркеры) производны от него и пересоздаются при map.setStyle() через rebuildGpxOverlays() (REQ-F-13, ADR-002).
  • Дополнительно потребуется состояние «активный трек» (для статистики и профиля высот) — хранится в gpx.js, должно переживать смену стиля.

4. Объём данных в памяти

Предельный файл 50 МБ ≈ 500K+ точек. Ориентировочный транзиентный профиль:

Стадия Память (порядок)
Строка файла ~50 МБ
DOM после parseFromString ~150300 МБ (освобождается после конвертации)
Модель points + GeoJSON source десятки МБ на файл

TRZ REQ-F-07 не ограничивает число одновременных треков. Накопление нескольких предельных файлов может исчерпать память вкладки на слабом устройстве — см. риск R-3 в 10-tech-risks.md.

5. Приватность

GPX-файлы могут содержать персональные данные (координаты поездок, метки времени <time>). В ET-006 эти данные:

  • не передаются на сервер (парсинг и хранение клиентские);
  • не сохраняются между сессиями (нет БД, нет localStorage).

Следствие: серверных обязательств по хранению/удержанию/удалению персональных данных ET-006 не порождает. Это сознательное проектное свойство, а не упущение.

6. Выходные данные

ET-006 не экспортирует и не записывает данные (экспорт обратно в GPX — out of scope, BRD §3). Профиль высот и статистика — производные расчёты, существуют только в UI.