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

103 lines
4.9 KiB
Markdown
Raw Permalink 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.
---
type: data-requirements
work_item_id: ET-006
version: 1
status: approved
created_at: 2026-05-22
authors:
- "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):
```javascript
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.