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

@@ -3988,7 +3988,8 @@ export const gpsAssets = pgTable("gps_assets", {
lastLng: doublePrecision("last_lng"),
lastSpeed: doublePrecision("last_speed"),
lastCourse: doublePrecision("last_course"),
lastSeenAt: timestamp("last_seen_at"),
lastSeenAt: timestamp("last_seen_at"), // время ПРИЁМА последней точки сервером (онлайн-индикатор)
lastRecordedAt: timestamp("last_recorded_at"), // время последней точки по устройству (fixTime)
createdAt: timestamp("created_at").defaultNow(),
}, (table) => ({
orgIdx: index("gps_assets_org_idx").on(table.organizationId),
@@ -4106,3 +4107,14 @@ export const gpsAssetSubscribers = pgTable("gps_asset_subscribers", {
export type GpsAssetSubscriber = typeof gpsAssetSubscribers.$inferSelect;
export type InsertGpsAssetSubscriber = typeof gpsAssetSubscribers.$inferInsert;
// Настройки GPS-модуля организации (фильтр джиттера и т.п.)
export const gpsSettings = pgTable("gps_settings", {
organizationId: integer("organization_id").primaryKey().references(() => organizations.id, { onDelete: "cascade" }),
jitterMeters: integer("jitter_meters").notNull().default(25),
updatedAt: timestamp("updated_at").notNull().defaultNow(),
});
export type GpsSettings = typeof gpsSettings.$inferSelect;
export type InsertGpsSettings = typeof gpsSettings.$inferInsert;