feat(gps): last_seen по времени приёма, фильтр джиттера (настройки), линейка, трек по скорости; fix: карта не перекрывает диалоги (isolation)

This commit is contained in:
2026-08-25 17:01:44 +03:00
parent 670cecfe05
commit b635d1e16e
12 changed files with 453 additions and 34 deletions

View File

@@ -167,6 +167,24 @@ export function registerGpsRoutes(app: Express) {
res.json({ success: true, yandexMapsKey });
});
// =====================
// Настройки GPS организации (фильтр джиттера)
// =====================
router.get("/settings", async (req: AuthenticatedRequest, res: Response) => {
const settings = await gpsStorage.getSettings(req.user!.organizationId);
res.json({ success: true, jitterMeters: settings.jitterMeters });
});
router.put("/settings", async (req: AuthenticatedRequest, res: Response) => {
const jitterMeters = Number(req.body?.jitterMeters);
if (!Number.isInteger(jitterMeters) || jitterMeters < 0 || jitterMeters > 1000) {
return badRequest(res, "jitterMeters: целое число от 0 до 1000");
}
const row = await gpsStorage.upsertSettings(req.user!.organizationId, jitterMeters);
res.json({ success: true, jitterMeters: row.jitterMeters });
});
// =====================
// Объекты (assets)
// =====================
@@ -267,7 +285,9 @@ export function registerGpsRoutes(app: Express) {
lng: a.lastLng,
speed: a.lastSpeed,
course: a.lastCourse,
recordedAt: a.lastSeenAt,
recordedAt: a.lastSeenAt, // время приёма последней точки сервером
lastSeenAt: a.lastSeenAt,
lastRecordedAt: a.lastRecordedAt, // время последней точки по устройству
})),
});
});