From 2bf08a10e3de27713d6aedfabf69c91832263d56 Mon Sep 17 00:00:00 2001 From: claude-bot Date: Wed, 3 Jun 2026 20:05:12 +0000 Subject: [PATCH] analyst(ET): auto-commit from analyst run_id=63 --- docs/work-items/ET-011/01-brd.md | 123 +++++++++ docs/work-items/ET-011/02-trz.md | 234 ++++++++++++++++ .../ET-011/03-acceptance-criteria.md | 197 ++++++++++++++ docs/work-items/ET-011/04-test-plan.yaml | 250 ++++++++++++++++++ docs/work-items/ET-011/04b-ui-test-cases.md | 180 +++++++++++++ 5 files changed, 984 insertions(+) create mode 100644 docs/work-items/ET-011/01-brd.md create mode 100644 docs/work-items/ET-011/02-trz.md create mode 100644 docs/work-items/ET-011/03-acceptance-criteria.md create mode 100644 docs/work-items/ET-011/04-test-plan.yaml create mode 100644 docs/work-items/ET-011/04b-ui-test-cases.md diff --git a/docs/work-items/ET-011/01-brd.md b/docs/work-items/ET-011/01-brd.md new file mode 100644 index 0000000..b3dbd5c --- /dev/null +++ b/docs/work-items/ET-011/01-brd.md @@ -0,0 +1,123 @@ +# BRD: Скачивание трека из popup на карте + +**Work Item:** ET-011 +**Стадия:** Анализ +**Автор:** analyst +**Дата:** 2026-06-03 + +--- + +## 1. Контекст и проблема + +Пользователь (мотоциклист-эндурист) изучает карту, видит публичные GPS-треки +(слой ET-008 «Публичные треки»), тапает понравившийся трек и видит во +всплывающем окне его метаданные: название, активность, длину, точки, дату, +источники. Однако сейчас **нет способа сохранить трек к себе** — приходится +переходить по внешней ссылке источника (если она есть) и искать там кнопку +скачивания, либо вообще нет возможности (например, в OSM-источнике). + +**Боль:** мотоциклист, готовясь к выезду в офлайн-режиме, не может за один +тап забрать понравившийся трек в свой GPS-навигатор (Garmin, OsmAnd, +Locus, smartphone) или планировщик. + +## 2. Цель + +Дать пользователю **скачать понравившийся трек прямо из popup на карте** +одним нажатием — получить файл в стандартном формате (GPX), пригодный +для импорта в любой GPS-софт. + +## 3. Целевая аудитория + +- Мотоциклист-эндурист, изучающий маршруты перед поездкой +- Велосипедист / турист, скачивающий чужой трек для повторного прохождения +- Турфирма / организатор, готовящая раздаточный материал + +## 4. Бизнес-ценность + +| Метрика | Эффект ожидаемый | +|------------------------------------------------------|-------------------------------------------------| +| Доля сессий с тапом по треку → действие | Сейчас 0% (только просмотр), цель ≥ 20% | +| Возвраты пользователя за треками | ↑ (приложение становится «полезным», а не «смотровым») | +| Конверсия публичных треков в реальные пройденные | ↑ (треки начинают перетекать в GPS) | + +## 5. Область (Scope) + +### В скоупе + +1. **UI:** в существующем popup публичного трека (`_renderTrackPopupHtml` + в `src/web/gps_tracks.js`) появляется кнопка/иконка «Скачать». +2. **Backend:** новый эндпоинт отдачи GPX-файла по идентификатору трека + из таблицы `tracks` БД `gps_tracks.sqlite`. +3. **Формат:** GPX 1.1 — обязательно. +4. **Формат:** KML 2.2 — опционально, если бюджет позволяет (R-K-01, + см. ниже). +5. **Имя файла:** человекочитаемое, из имени трека (см. NFR-04). + +### Вне скоупа + +- Авторизация / приватные треки — все треки в БД публичны. +- Массовое скачивание (пачкой) — только по одному. +- Кастомизация GPX (waypoints, расширения Garmin, цвета) — отдаём + «голую» трассу. +- Скачивание загруженных пользователем GPX (ET-006) — там уже есть + кнопка скачивания в panel `sheet-gpx`, и это другой источник данных. +- Скачивание построенного маршрута (Route / Scenic / Link) — это + отдельный поток `downloadGPX()` в `sheet-route`, не трогаем. +- Регулирование rate limit и квоты — нет, трафик низкий. + +## 6. Пользовательские истории + +**US-1 (Mandatory):** Как мотоциклист, я хочу тапнуть трек на карте, +увидеть popup с его метаданными и нажать «Скачать», чтобы получить GPX-файл +в загрузках браузера — без перехода на сторонний сайт. + +**US-2 (Mandatory):** Как пользователь мобильного браузера, я хочу получить +файл в формате, который мой телефон сразу предложит «Открыть в…» или +«Сохранить» (стандартный `Content-Disposition: attachment`). + +**US-3 (Optional, R-K-01):** Как пользователь Google Earth / некоторых +старых навигаторов, я хочу выбрать формат KML вместо GPX. + +**US-4 (Mandatory):** Как пользователь, я хочу, чтобы имя файла отражало +название трека (а не голый `id.gpx`), чтобы не путаться в загрузках. + +## 7. Ограничения и допущения + +- A1: треки в БД хранятся как WKB LineString в столбце `tracks.geom`, + координаты EPSG:4326 (lon, lat). +- A2: высоты (`ele`) в БД **не хранятся** — отдаём GPX без ``. + Время точек (`time`) — тоже не хранится, отдаём без `