fix(gps): отсев устаревших копий и LBS-телепортов (stale/jump фильтры), настройка maxJumpSpeedKmh, фильтрация трека при выдаче

This commit is contained in:
2026-08-25 17:49:38 +03:00
parent b635d1e16e
commit 3d24a15fb3
8 changed files with 189 additions and 38 deletions

View File

@@ -461,22 +461,28 @@ export class GpsStorage {
// Настройки организации
// =====================
/** Настройки GPS организации; если строки нет — дефолт */
async getSettings(organizationId: number): Promise<{ jitterMeters: number }> {
/** Настройки GPS организации; если строки нет — дефолты */
async getSettings(organizationId: number): Promise<{ jitterMeters: number; maxJumpSpeedKmh: number }> {
const [row] = await db
.select()
.from(gpsSettings)
.where(eq(gpsSettings.organizationId, organizationId));
return { jitterMeters: row?.jitterMeters ?? 25 };
return {
jitterMeters: row?.jitterMeters ?? 25,
maxJumpSpeedKmh: row?.maxJumpSpeedKmh ?? 250,
};
}
async upsertSettings(organizationId: number, jitterMeters: number): Promise<GpsSettings> {
async upsertSettings(
organizationId: number,
settings: { jitterMeters: number; maxJumpSpeedKmh: number }
): Promise<GpsSettings> {
const [row] = await db
.insert(gpsSettings)
.values({ organizationId, jitterMeters, updatedAt: new Date() })
.values({ organizationId, ...settings, updatedAt: new Date() })
.onConflictDoUpdate({
target: gpsSettings.organizationId,
set: { jitterMeters, updatedAt: new Date() },
set: { ...settings, updatedAt: new Date() },
})
.returning();
return row;