routes: return a reliable id from addRoute (re-read, not lastInsertId)
Found in desktop testing: saving a built route showed 'Маршрут пуст' and dropped to the list — addRoute returned the INSERT lastInsertId, an i64 the SQL plugin corrupts by ±1, so showRouteDetail opened a non-existent id. Re-read the id via CAST(id AS TEXT) (same guard importGpxSession uses). Session log: desktop verification of all 6 fixes.
This commit is contained in:
parent
e45c92f09a
commit
aa7022ec6b
2 changed files with 20 additions and 8 deletions
|
|
@ -27,11 +27,20 @@
|
|||
(раньше отбрасывались) → `drawRoutePolyline` рисует оковку и в редакторе, и в детали.
|
||||
`drawRoutePolyline`: прямые отрезки без высот — только тонкой линией.
|
||||
|
||||
## Проверка
|
||||
- Синтаксис gps/db/main OK (node --check). const в новых функциях — нет.
|
||||
- ДЕСКТОП-ТЕСТ на Xvfb со скринами — следующий шаг (на момент записи не гонял).
|
||||
- На теле встроенным движком — после `./build.sh android -d -i`.
|
||||
## Проверка (десктоп Xvfb :99 + домашний RouteServer, скрины)
|
||||
- Редактор: 3 точки по Новочеркасску → маршрут рисуется оковкой с уклоном (зелёный→красный) +
|
||||
тонкой линией, как в детали (#6). Тумблер уклон/высота (∡→⛰) переключает раскраску (#1).
|
||||
Тап по линии вставил точку (4-я, маршрут перестроился) — легко попал (#4). Низ: подсказка
|
||||
сверху, кнопки рядом, «Отмена» ниже (#3).
|
||||
- Сохранение: в БД points_json = 61 точка с ele + waypoints_json = 4 опорные; список показал
|
||||
«4 тчк · ▲» (#5). Деталь маршрута — оковка+уклон+профиль высоты, как импорт (#6).
|
||||
- Баг, найденный тестом: сохранение показывало «Маршрут пуст» — `addRoute` возвращал
|
||||
`lastInsertId` (i64 портится SQL-плагином ±1). Исправлено: id перечитывается через
|
||||
`CAST(id AS TEXT)` (как в `importGpxSession`). После фикса сохранение ведёт прямо в деталь.
|
||||
- Достройка (#2): на 06-22 старый порог давал 4 пропуска, новый (dt>60/хорда>150 + пропуск
|
||||
крюков и «нулевого выигрыша») — 2 реальных длинных дропаута (+1.64 км), маргинальные отсеяны.
|
||||
- Экран записи (`.rec-bottom`) не тронут. Тестовые маршруты из десктопной БД убраны.
|
||||
|
||||
## Дальше
|
||||
- Прогнать на Xvfb: редактор (оковка/тумблеры/тап-вставка/низ), сохранение опорных, деталь с
|
||||
оковкой; достройка на 09-08 — только длинные дропауты. Экран записи не сломан.
|
||||
- На теле встроенным движком офлайн: `./build.sh android -d -i`. Проверить тач-жесты (тап-вставка,
|
||||
долгий тап — дорога/прямая) и достройку на реальных треках (09-08 и др.).
|
||||
|
|
|
|||
|
|
@ -1100,11 +1100,14 @@ async function getRoute(id) {
|
|||
}
|
||||
|
||||
async function addRoute(name, color, points, waypoints) {
|
||||
let r = await execute(
|
||||
await execute(
|
||||
"INSERT INTO routes (name, color, points_json, waypoints_json) VALUES (?1, ?2, ?3, ?4)",
|
||||
[name, color || "#e53935", JSON.stringify(points || []), waypoints ? JSON.stringify(waypoints) : null]
|
||||
);
|
||||
return r.lastInsertId;
|
||||
// lastInsertId comes back as an i64 the SQL plugin can corrupt by ±1 — re-read the id as
|
||||
// text instead (same guard as importGpxSession), so the caller opens the right route.
|
||||
let rows = await select("SELECT CAST(id AS TEXT) AS id FROM routes ORDER BY id DESC LIMIT 1");
|
||||
return rows.length ? rows[0].id : null;
|
||||
}
|
||||
|
||||
async function renameRoute(id, name) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue