@trafficgroup/knex-rel 0.0.28 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/.claude/settings.local.json +2 -5
  2. package/CLAUDE.md +72 -63
  3. package/dist/dao/VideoMinuteResultDAO.d.ts +149 -0
  4. package/dist/dao/VideoMinuteResultDAO.js +604 -0
  5. package/dist/dao/VideoMinuteResultDAO.js.map +1 -0
  6. package/dist/dao/auth/auth.dao.js +4 -1
  7. package/dist/dao/auth/auth.dao.js.map +1 -1
  8. package/dist/dao/chat/chat.dao.d.ts +1 -1
  9. package/dist/dao/chat/chat.dao.js +25 -35
  10. package/dist/dao/chat/chat.dao.js.map +1 -1
  11. package/dist/dao/folder/folder.dao.js +7 -2
  12. package/dist/dao/folder/folder.dao.js.map +1 -1
  13. package/dist/dao/message/message.dao.d.ts +1 -1
  14. package/dist/dao/message/message.dao.js +18 -26
  15. package/dist/dao/message/message.dao.js.map +1 -1
  16. package/dist/dao/study/study.dao.js +7 -2
  17. package/dist/dao/study/study.dao.js.map +1 -1
  18. package/dist/dao/user/user.dao.js +4 -1
  19. package/dist/dao/user/user.dao.js.map +1 -1
  20. package/dist/dao/user-push-notification-token/user-push-notification-token.dao.js +26 -8
  21. package/dist/dao/user-push-notification-token/user-push-notification-token.dao.js.map +1 -1
  22. package/dist/dao/video/video.dao.d.ts +8 -0
  23. package/dist/dao/video/video.dao.js +54 -7
  24. package/dist/dao/video/video.dao.js.map +1 -1
  25. package/dist/entities/BaseEntity.d.ts +4 -0
  26. package/dist/entities/BaseEntity.js +3 -0
  27. package/dist/entities/BaseEntity.js.map +1 -0
  28. package/dist/entities/VideoMinuteResult.d.ts +21 -0
  29. package/dist/entities/VideoMinuteResult.js +3 -0
  30. package/dist/entities/VideoMinuteResult.js.map +1 -0
  31. package/dist/index.d.ts +4 -2
  32. package/dist/index.js +3 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/interfaces/chat/chat.interfaces.d.ts +3 -3
  35. package/dist/interfaces/folder/folder.interfaces.d.ts +1 -1
  36. package/dist/interfaces/message/message.interfaces.d.ts +2 -2
  37. package/dist/interfaces/study/study.interfaces.d.ts +1 -1
  38. package/dist/interfaces/user/user.interfaces.d.ts +1 -1
  39. package/dist/interfaces/user-push-notification-token/user-push-notification-token.interfaces.d.ts +1 -1
  40. package/dist/interfaces/video/video.interfaces.d.ts +7 -2
  41. package/migrations/20250717160737_migration.ts +1 -1
  42. package/migrations/20250717160908_migration.ts +5 -2
  43. package/migrations/20250717161310_migration.ts +1 -1
  44. package/migrations/20250717161406_migration.ts +3 -3
  45. package/migrations/20250717162431_migration.ts +1 -1
  46. package/migrations/20250717173228_migration.ts +2 -2
  47. package/migrations/20250717204731_migration.ts +1 -1
  48. package/migrations/20250722210109_migration.ts +8 -4
  49. package/migrations/20250722211019_migration.ts +1 -1
  50. package/migrations/20250723153852_migration.ts +13 -10
  51. package/migrations/20250723162257_migration.ts +4 -7
  52. package/migrations/20250723171109_migration.ts +4 -7
  53. package/migrations/20250723205331_migration.ts +6 -9
  54. package/migrations/20250724191345_migration.ts +8 -11
  55. package/migrations/20250730180932_migration.ts +14 -13
  56. package/migrations/20250730213625_migration.ts +8 -11
  57. package/migrations/20250804124509_migration.ts +26 -21
  58. package/migrations/20250804132053_migration.ts +5 -8
  59. package/migrations/20250804164518_migration.ts +7 -7
  60. package/migrations/20250823223016_migration.ts +46 -0
  61. package/migrations/20250910015452_migration.ts +34 -0
  62. package/package.json +47 -47
  63. package/src/d.types.ts +22 -18
  64. package/src/dao/VideoMinuteResultDAO.ts +790 -0
  65. package/src/dao/auth/auth.dao.ts +58 -55
  66. package/src/dao/chat/chat.dao.ts +45 -43
  67. package/src/dao/folder/folder.dao.ts +75 -66
  68. package/src/dao/message/message.dao.ts +32 -32
  69. package/src/dao/study/study.dao.ts +75 -66
  70. package/src/dao/user/user.dao.ts +59 -57
  71. package/src/dao/user-push-notification-token/user-push-notification-token.dao.ts +83 -49
  72. package/src/dao/video/video.dao.ts +199 -120
  73. package/src/entities/BaseEntity.ts +4 -0
  74. package/src/entities/VideoMinuteResult.ts +24 -0
  75. package/src/index.ts +37 -23
  76. package/src/interfaces/auth/auth.interfaces.ts +10 -10
  77. package/src/interfaces/chat/chat.interfaces.ts +4 -4
  78. package/src/interfaces/folder/folder.interfaces.ts +13 -13
  79. package/src/interfaces/message/message.interfaces.ts +3 -3
  80. package/src/interfaces/study/study.interfaces.ts +12 -12
  81. package/src/interfaces/user/user.interfaces.ts +11 -11
  82. package/src/interfaces/user-push-notification-token/user-push-notification-token.interfaces.ts +9 -9
  83. package/src/interfaces/video/video.interfaces.ts +31 -21
@@ -0,0 +1,604 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.VideoMinuteResultDAO = void 0;
16
+ const KnexConnection_1 = __importDefault(require("../KnexConnection"));
17
+ class VideoMinuteResultDAO {
18
+ constructor() {
19
+ this.knex = KnexConnection_1.default.getConnection();
20
+ this.tableName = "video_minute_results";
21
+ }
22
+ getAll() {
23
+ return __awaiter(this, arguments, void 0, function* (page = 1, limit = 10) {
24
+ const offset = (page - 1) * limit;
25
+ const [countResult] = yield this.knex(this.tableName).count("* as count");
26
+ const totalCount = +countResult.count;
27
+ const data = yield this.knex(this.tableName)
28
+ .select("*")
29
+ .orderBy("created_at", "desc")
30
+ .limit(limit)
31
+ .offset(offset);
32
+ return {
33
+ success: true,
34
+ data: this.mapDbRowsToEntities(data),
35
+ page,
36
+ limit,
37
+ count: data.length,
38
+ totalCount,
39
+ totalPages: Math.ceil(totalCount / limit),
40
+ };
41
+ });
42
+ }
43
+ getById(id) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const result = yield this.knex(this.tableName).where("id", id).first();
46
+ return result ? this.mapDbRowToEntity(result) : null;
47
+ });
48
+ }
49
+ getByUuid(uuid) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const result = yield this.knex(this.tableName).where("uuid", uuid).first();
52
+ return result ? this.mapDbRowToEntity(result) : null;
53
+ });
54
+ }
55
+ create(data) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const dbData = this.mapEntityToDbRow(data);
58
+ const [result] = yield this.knex(this.tableName)
59
+ .insert(dbData)
60
+ .returning("*");
61
+ return this.mapDbRowToEntity(result);
62
+ });
63
+ }
64
+ update(id, data) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const dbData = this.mapEntityToDbRow(data);
67
+ const [result] = yield this.knex(this.tableName)
68
+ .where("id", id)
69
+ .update(Object.assign(Object.assign({}, dbData), { updated_at: this.knex.fn.now() }))
70
+ .returning("*");
71
+ return result ? this.mapDbRowToEntity(result) : null;
72
+ });
73
+ }
74
+ delete(id) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const result = yield this.knex(this.tableName).where("id", id).del();
77
+ return result > 0;
78
+ });
79
+ }
80
+ /**
81
+ * Get minute results for a specific video with optional time range filtering
82
+ */
83
+ getMinuteResultsForVideo(videoId_1, startMinute_1, endMinute_1) {
84
+ return __awaiter(this, arguments, void 0, function* (videoId, startMinute, endMinute, page = 1, limit = 100) {
85
+ const offset = (page - 1) * limit;
86
+ const query = this.knex(this.tableName + " as vmr")
87
+ .innerJoin("video as v", "vmr.video_id", "v.id")
88
+ .select("vmr.*", "v.name as video_name", "v.uuid as video_uuid")
89
+ .where("vmr.video_id", videoId);
90
+ if (startMinute !== undefined) {
91
+ query.where("vmr.minute_number", ">=", startMinute);
92
+ }
93
+ if (endMinute !== undefined) {
94
+ query.where("vmr.minute_number", "<=", endMinute);
95
+ }
96
+ // Standard pagination logic with count optimization
97
+ const [{ count }] = yield query.clone().clearSelect().count("* as count");
98
+ const data = yield query
99
+ .orderBy("vmr.minute_number", "asc")
100
+ .limit(limit)
101
+ .offset(offset);
102
+ return {
103
+ success: true,
104
+ data: this.mapDbRowsToEntities(data),
105
+ page,
106
+ limit,
107
+ count: data.length,
108
+ totalCount: parseInt(count),
109
+ totalPages: Math.ceil(parseInt(count) / limit),
110
+ };
111
+ });
112
+ }
113
+ /**
114
+ * Create batch of minute results for efficient bulk insertion
115
+ */
116
+ createBatch(videoId, minuteResults) {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const batchData = minuteResults.map((result) => this.mapEntityToDbRow(Object.assign(Object.assign({}, result), { videoId })));
119
+ const results = yield this.knex
120
+ .batchInsert(this.tableName, batchData, 50)
121
+ .returning("*");
122
+ return this.mapDbRowsToEntities(results);
123
+ });
124
+ }
125
+ /**
126
+ * Delete all minute results for a specific video
127
+ */
128
+ deleteByVideoId(videoId) {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ const result = yield this.knex(this.tableName)
131
+ .where("video_id", videoId)
132
+ .del();
133
+ return result > 0;
134
+ });
135
+ }
136
+ /**
137
+ * Get the minute range for a video (min and max minute numbers)
138
+ */
139
+ getVideoMinuteRange(videoId) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ const result = yield this.knex(this.tableName)
142
+ .where("video_id", videoId)
143
+ .min("minute_number as minMinute")
144
+ .max("minute_number as maxMinute")
145
+ .first();
146
+ if (!result || result.minMinute === null) {
147
+ return null;
148
+ }
149
+ return {
150
+ minMinute: result.minMinute,
151
+ maxMinute: result.maxMinute,
152
+ };
153
+ });
154
+ }
155
+ /**
156
+ * Map database row to entity (snake_case -> camelCase)
157
+ */
158
+ mapDbRowToEntity(row) {
159
+ return {
160
+ id: row.id,
161
+ uuid: row.uuid,
162
+ videoId: row.video_id,
163
+ minuteNumber: row.minute_number,
164
+ results: row.results,
165
+ createdAt: row.created_at,
166
+ updatedAt: row.updated_at,
167
+ };
168
+ }
169
+ /**
170
+ * Map multiple database rows to entities
171
+ */
172
+ mapDbRowsToEntities(rows) {
173
+ return rows.map((row) => this.mapDbRowToEntity(row));
174
+ }
175
+ /**
176
+ * Map entity to database row (camelCase -> snake_case)
177
+ */
178
+ mapEntityToDbRow(entity) {
179
+ const dbRow = {};
180
+ if (entity.videoId !== undefined)
181
+ dbRow.video_id = entity.videoId;
182
+ if ("minuteNumber" in entity && entity.minuteNumber !== undefined)
183
+ dbRow.minute_number = entity.minuteNumber;
184
+ if (entity.results !== undefined)
185
+ dbRow.results = entity.results;
186
+ if ("createdAt" in entity && entity.createdAt !== undefined)
187
+ dbRow.created_at = entity.createdAt;
188
+ if ("updatedAt" in entity && entity.updatedAt !== undefined)
189
+ dbRow.updated_at = entity.updatedAt;
190
+ return dbRow;
191
+ }
192
+ /**
193
+ * Get minute results by video UUID (convenience method)
194
+ */
195
+ getMinuteResultsByVideoUuid(videoUuid_1, startMinute_1, endMinute_1) {
196
+ return __awaiter(this, arguments, void 0, function* (videoUuid, startMinute, endMinute, page = 1, limit = 100) {
197
+ const offset = (page - 1) * limit;
198
+ const query = this.knex(this.tableName + " as vmr")
199
+ .innerJoin("video as v", "vmr.video_id", "v.id")
200
+ .select("vmr.*", "v.name as video_name", "v.uuid as video_uuid")
201
+ .where("v.uuid", videoUuid);
202
+ if (startMinute !== undefined) {
203
+ query.where("vmr.minute_number", ">=", startMinute);
204
+ }
205
+ if (endMinute !== undefined) {
206
+ query.where("vmr.minute_number", "<=", endMinute);
207
+ }
208
+ // Check if video exists and get count in single query
209
+ const [{ count }] = yield query.clone().clearSelect().count("* as count");
210
+ const totalCount = parseInt(count);
211
+ if (totalCount === 0) {
212
+ // Check if video exists by trying to find it
213
+ const videoExists = yield this.knex("video")
214
+ .where("uuid", videoUuid)
215
+ .first();
216
+ if (!videoExists) {
217
+ throw new Error(`Video with UUID ${videoUuid} not found`);
218
+ }
219
+ }
220
+ const data = yield query
221
+ .orderBy("vmr.minute_number", "asc")
222
+ .limit(limit)
223
+ .offset(offset);
224
+ return {
225
+ success: true,
226
+ data: this.mapDbRowsToEntities(data),
227
+ page,
228
+ limit,
229
+ count: data.length,
230
+ totalCount,
231
+ totalPages: Math.ceil(totalCount / limit),
232
+ };
233
+ });
234
+ }
235
+ /**
236
+ * Get grouped minute results by video UUID with time block aggregation
237
+ * @param videoUuid - The UUID of the video
238
+ * @param groupingMinutes - Number of minutes to group together (1, 5, 10, 15, 30, 60)
239
+ * @param startMinute - Optional start minute filter
240
+ * @param endMinute - Optional end minute filter
241
+ */
242
+ getGroupedMinuteResultsByVideoUuid(videoUuid_1) {
243
+ return __awaiter(this, arguments, void 0, function* (videoUuid, groupingMinutes = 1, startMinute, endMinute) {
244
+ // First, get the video to ensure it exists and get metadata
245
+ const video = yield this.knex("video").where("uuid", videoUuid).first();
246
+ if (!video) {
247
+ throw new Error(`Video with UUID ${videoUuid} not found`);
248
+ }
249
+ // Build the base query for minute results
250
+ const query = this.knex(this.tableName + " as vmr").where("vmr.video_id", video.id);
251
+ if (startMinute !== undefined) {
252
+ query.where("vmr.minute_number", ">=", startMinute);
253
+ }
254
+ if (endMinute !== undefined) {
255
+ query.where("vmr.minute_number", "<=", endMinute);
256
+ }
257
+ // If grouping is 1 minute, just return the regular results
258
+ if (groupingMinutes === 1) {
259
+ const data = yield query
260
+ .select("vmr.*")
261
+ .orderBy("vmr.minute_number", "asc");
262
+ return {
263
+ success: true,
264
+ data: data.map((row) => ({
265
+ groupIndex: row.minute_number,
266
+ startMinute: row.minute_number,
267
+ endMinute: row.minute_number,
268
+ label: this.formatTimeLabel(row.minute_number, row.minute_number),
269
+ results: row.results,
270
+ minuteCount: 1,
271
+ })),
272
+ groupingMinutes,
273
+ video: {
274
+ uuid: video.uuid,
275
+ name: video.name,
276
+ videoType: video.videoType,
277
+ status: video.status,
278
+ },
279
+ };
280
+ }
281
+ // Use Knex query builder for safe parameter binding
282
+ const groupingQuery = this.knex(this.tableName)
283
+ .select(this.knex.raw("FLOOR(minute_number / ?) as group_index", [
284
+ groupingMinutes,
285
+ ]), this.knex.raw("MIN(minute_number) as start_minute"), this.knex.raw("MAX(minute_number) as end_minute"), this.knex.raw("COUNT(*) as minute_count"), this.knex.raw("array_agg(results ORDER BY minute_number) as all_results"))
286
+ .where("video_id", video.id);
287
+ if (startMinute !== undefined) {
288
+ groupingQuery.where("minute_number", ">=", startMinute);
289
+ }
290
+ if (endMinute !== undefined) {
291
+ groupingQuery.where("minute_number", "<=", endMinute);
292
+ }
293
+ const rows = yield groupingQuery
294
+ .groupBy("group_index")
295
+ .orderBy("group_index");
296
+ // Aggregate the results in TypeScript based on video type
297
+ const aggregatedGroups = rows.map((row) => {
298
+ if (!row || typeof row !== "object") {
299
+ throw new Error("Invalid row data received from database query");
300
+ }
301
+ const allResults = Array.isArray(row.all_results) ? row.all_results : [];
302
+ // Determine video type based on multiple factors
303
+ let studyType = video.videoType || "ATR"; // Default fallback to ATR
304
+ // Check if minute data has study_type field (ATR usually does)
305
+ if (allResults.length > 0 && allResults[0].study_type) {
306
+ studyType = allResults[0].study_type;
307
+ }
308
+ else if (allResults.length > 0) {
309
+ // Check data structure to determine type
310
+ const sampleResult = allResults[0];
311
+ if (sampleResult.vehicles) {
312
+ // Check if vehicles structure has directions (NORTH, SOUTH, etc.) - TMC pattern
313
+ const vehicleKeys = Object.keys(sampleResult.vehicles);
314
+ if (vehicleKeys.length > 0) {
315
+ const firstVehicleType = sampleResult.vehicles[vehicleKeys[0]];
316
+ if (firstVehicleType && typeof firstVehicleType === "object") {
317
+ const directions = Object.keys(firstVehicleType);
318
+ if (directions.includes("NORTH") ||
319
+ directions.includes("SOUTH") ||
320
+ directions.includes("EAST") ||
321
+ directions.includes("WEST")) {
322
+ studyType = "TMC";
323
+ }
324
+ }
325
+ }
326
+ }
327
+ }
328
+ // Aggregate based on determined video type
329
+ let aggregatedResult;
330
+ if (studyType === "TMC") {
331
+ aggregatedResult = this.aggregateTMCResults(allResults);
332
+ }
333
+ else {
334
+ aggregatedResult = this.aggregateATRResults(allResults);
335
+ }
336
+ return {
337
+ groupIndex: row.group_index,
338
+ startMinute: row.start_minute,
339
+ endMinute: row.end_minute,
340
+ label: this.formatTimeLabel(row.start_minute, row.end_minute),
341
+ results: aggregatedResult,
342
+ minuteCount: row.minute_count,
343
+ };
344
+ });
345
+ return {
346
+ success: true,
347
+ data: aggregatedGroups,
348
+ groupingMinutes,
349
+ video: {
350
+ uuid: video.uuid,
351
+ name: video.name,
352
+ videoType: video.videoType,
353
+ status: video.status,
354
+ },
355
+ };
356
+ });
357
+ }
358
+ /**
359
+ * Aggregate minute results based on video type (TMC or ATR)
360
+ */
361
+ aggregateMinuteResults(minutes, videoType) {
362
+ if (minutes.length === 0)
363
+ return {};
364
+ // Initialize the aggregated result structure based on the first minute
365
+ const firstMinuteResults = minutes[0].results;
366
+ const aggregated = this.deepCloneStructure(firstMinuteResults);
367
+ // For TMC videos, aggregate turning movements
368
+ if (videoType === "TMC") {
369
+ return this.aggregateTMCResults(minutes);
370
+ }
371
+ // For ATR videos, aggregate lane counts
372
+ if (videoType === "ATR" || videoType === "ATP") {
373
+ return this.aggregateATRResults(minutes);
374
+ }
375
+ // Default aggregation for other types
376
+ return this.aggregateGenericResults(minutes);
377
+ }
378
+ /**
379
+ * Aggregate TMC (Turning Movement Count) results
380
+ */
381
+ aggregateTMCResults(minutes) {
382
+ const aggregated = {
383
+ vehicles: {},
384
+ counts: {
385
+ total_vehicles: 0,
386
+ entry_vehicles: 0,
387
+ },
388
+ total: 0,
389
+ totalcount: 0,
390
+ detected_classes: {},
391
+ study_type: "TMC",
392
+ };
393
+ for (const minute of minutes) {
394
+ const results = minute; // minute is already the results object from array_agg
395
+ // Aggregate vehicle movements by class and direction
396
+ if (results.vehicles && typeof results.vehicles === "object") {
397
+ for (const [vehicleClass, directions] of Object.entries(results.vehicles)) {
398
+ // Skip the 'total' pseudo vehicle class - validate it's actually aggregate data
399
+ if (vehicleClass === "total" && typeof directions === "number") {
400
+ continue; // This is aggregate total data, not a vehicle class
401
+ }
402
+ if (!aggregated.vehicles[vehicleClass]) {
403
+ aggregated.vehicles[vehicleClass] = {};
404
+ }
405
+ if (!aggregated.detected_classes[vehicleClass]) {
406
+ aggregated.detected_classes[vehicleClass] = 0;
407
+ }
408
+ for (const [direction, turns] of Object.entries(directions)) {
409
+ if (!aggregated.vehicles[vehicleClass][direction]) {
410
+ aggregated.vehicles[vehicleClass][direction] = {
411
+ straight: 0,
412
+ left: 0,
413
+ right: 0,
414
+ "u-turn": 0,
415
+ };
416
+ }
417
+ if (typeof turns === "object" && turns !== null) {
418
+ for (const [turnType, count] of Object.entries(turns)) {
419
+ const turnCount = count || 0;
420
+ aggregated.vehicles[vehicleClass][direction][turnType] =
421
+ (aggregated.vehicles[vehicleClass][direction][turnType] ||
422
+ 0) + turnCount;
423
+ // Add to detected_classes count for this vehicle type
424
+ aggregated.detected_classes[vehicleClass] += turnCount;
425
+ // Add to total counts
426
+ aggregated.total += turnCount;
427
+ aggregated.totalcount += turnCount;
428
+ }
429
+ }
430
+ }
431
+ }
432
+ // Also process the 'total' entry for validation but don't count it as a vehicle class
433
+ if (results.vehicles.total) {
434
+ for (const [direction, turns] of Object.entries(results.vehicles.total)) {
435
+ if (typeof turns === "object" && turns !== null) {
436
+ for (const [turnType, count] of Object.entries(turns)) {
437
+ const turnCount = count || 0;
438
+ aggregated.counts.total_vehicles += turnCount;
439
+ }
440
+ }
441
+ }
442
+ }
443
+ }
444
+ }
445
+ // Set entry_vehicles same as total_vehicles for TMC
446
+ aggregated.counts.entry_vehicles =
447
+ aggregated.counts.total_vehicles || aggregated.total;
448
+ return aggregated;
449
+ }
450
+ /**
451
+ * Aggregate ATR (Automatic Traffic Recorder) results
452
+ */
453
+ aggregateATRResults(minutes) {
454
+ const aggregated = {
455
+ vehicles: {},
456
+ lane_counts: {},
457
+ total_count: 0,
458
+ detected_classes: {},
459
+ study_type: "ATR",
460
+ };
461
+ for (const minute of minutes) {
462
+ const results = minute; // minute is already the results object from array_agg
463
+ // Aggregate vehicle counts by class and lane
464
+ if (results.vehicles) {
465
+ for (const [rawVehicleClass, lanes] of Object.entries(results.vehicles)) {
466
+ // Normalize vehicle class names to standard format for frontend compatibility
467
+ const vehicleClass = this.normalizeATRVehicleClass(rawVehicleClass);
468
+ if (!aggregated.vehicles[vehicleClass]) {
469
+ aggregated.vehicles[vehicleClass] = {};
470
+ }
471
+ for (const [laneId, count] of Object.entries(lanes)) {
472
+ const numericCount = typeof count === "number" ? count : parseInt(String(count)) || 0;
473
+ aggregated.vehicles[vehicleClass][laneId] =
474
+ (aggregated.vehicles[vehicleClass][laneId] || 0) + numericCount;
475
+ }
476
+ }
477
+ }
478
+ // Aggregate lane counts
479
+ if (results.lane_counts) {
480
+ for (const [laneId, count] of Object.entries(results.lane_counts)) {
481
+ aggregated.lane_counts[laneId] =
482
+ (aggregated.lane_counts[laneId] || 0) + (count || 0);
483
+ }
484
+ }
485
+ // Aggregate total count
486
+ aggregated.total_count += results.total_count || 0;
487
+ // Aggregate detected classes with normalized names
488
+ if (results.detected_classes) {
489
+ for (const [rawCls, count] of Object.entries(results.detected_classes)) {
490
+ const cls = this.normalizeATRVehicleClass(rawCls);
491
+ aggregated.detected_classes[cls] =
492
+ (aggregated.detected_classes[cls] || 0) + (count || 0);
493
+ }
494
+ }
495
+ }
496
+ return aggregated;
497
+ }
498
+ /**
499
+ * Generic aggregation for other video types
500
+ */
501
+ aggregateGenericResults(minutes) {
502
+ if (minutes.length === 0)
503
+ return {};
504
+ // For generic aggregation, sum all numeric values
505
+ const aggregated = JSON.parse(JSON.stringify(minutes[0].results));
506
+ for (let i = 1; i < minutes.length; i++) {
507
+ this.sumNumericValues(aggregated, minutes[i].results);
508
+ }
509
+ return aggregated;
510
+ }
511
+ /**
512
+ * Recursively sum numeric values in nested objects
513
+ */
514
+ sumNumericValues(target, source) {
515
+ for (const key in source) {
516
+ if (typeof source[key] === "number") {
517
+ target[key] = (target[key] || 0) + source[key];
518
+ }
519
+ else if (typeof source[key] === "object" &&
520
+ source[key] !== null &&
521
+ !Array.isArray(source[key])) {
522
+ if (!target[key]) {
523
+ target[key] = {};
524
+ }
525
+ this.sumNumericValues(target[key], source[key]);
526
+ }
527
+ }
528
+ }
529
+ /**
530
+ * Deep clone a result structure, setting all numeric values to 0
531
+ */
532
+ deepCloneStructure(obj) {
533
+ if (typeof obj !== "object" || obj === null) {
534
+ return typeof obj === "number" ? 0 : obj;
535
+ }
536
+ if (Array.isArray(obj)) {
537
+ return obj.map((item) => this.deepCloneStructure(item));
538
+ }
539
+ const cloned = {};
540
+ for (const key in obj) {
541
+ cloned[key] = this.deepCloneStructure(obj[key]);
542
+ }
543
+ return cloned;
544
+ }
545
+ /**
546
+ * Normalize ATR vehicle class names to standard format for frontend compatibility
547
+ */
548
+ normalizeATRVehicleClass(rawVehicleClass) {
549
+ const normalized = rawVehicleClass.toLowerCase().replace(/[_\s-]/g, "");
550
+ // Map raw vehicle classes to standard classes
551
+ if (normalized.includes("car") ||
552
+ normalized === "vehicle" ||
553
+ normalized === "automobiles") {
554
+ return "cars";
555
+ }
556
+ if (normalized.includes("medium") ||
557
+ normalized.includes("pickup") ||
558
+ (normalized.includes("truck") && !normalized.includes("heavy"))) {
559
+ return "mediums";
560
+ }
561
+ if (normalized.includes("heavy") ||
562
+ normalized.includes("largetruck") ||
563
+ normalized.includes("bigtruck")) {
564
+ return "heavy_trucks";
565
+ }
566
+ if (normalized.includes("pedestrian") ||
567
+ normalized.includes("person") ||
568
+ normalized.includes("people")) {
569
+ return "pedestrians";
570
+ }
571
+ if (normalized.includes("bicycle") ||
572
+ normalized.includes("bike") ||
573
+ normalized.includes("cyclist")) {
574
+ return "bicycles";
575
+ }
576
+ if (normalized.includes("total") || normalized.includes("all")) {
577
+ return "total";
578
+ }
579
+ // Handle specific known ATR classes
580
+ if (rawVehicleClass === "mediums")
581
+ return "mediums";
582
+ if (rawVehicleClass === "heavy_trucks")
583
+ return "heavy_trucks";
584
+ // Default fallback for unknown classes
585
+ return "cars";
586
+ }
587
+ /**
588
+ * Format time label for display (HH:MM:SS format)
589
+ */
590
+ formatTimeLabel(startMinute, endMinute) {
591
+ const formatMinute = (min) => {
592
+ const hours = Math.floor(min / 60);
593
+ const minutes = min % 60;
594
+ return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
595
+ };
596
+ if (startMinute === endMinute) {
597
+ return `${formatMinute(startMinute)}:00 - ${formatMinute(startMinute)}:59`;
598
+ }
599
+ return `${formatMinute(startMinute)}:00 - ${formatMinute(endMinute)}:59`;
600
+ }
601
+ }
602
+ exports.VideoMinuteResultDAO = VideoMinuteResultDAO;
603
+ exports.default = VideoMinuteResultDAO;
604
+ //# sourceMappingURL=VideoMinuteResultDAO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoMinuteResultDAO.js","sourceRoot":"","sources":["../../src/dao/VideoMinuteResultDAO.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,10 @@ class AuthDAO {
50
50
  }
51
51
  update(id, item) {
52
52
  return __awaiter(this, void 0, void 0, function* () {
53
- const [updatedAuth] = yield this._knex("auth").where({ id }).update(item).returning("*");
53
+ const [updatedAuth] = yield this._knex("auth")
54
+ .where({ id })
55
+ .update(item)
56
+ .returning("*");
54
57
  return updatedAuth || null;
55
58
  });
56
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.dao.js","sourceRoot":"","sources":["../../../src/dao/auth/auth.dao.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,0EAA+C;AAE/C,MAAa,OAAO;IAApB;QACY,UAAK,GAAyB,wBAAW,CAAC,aAAa,EAAE,CAAC;IAsDtE,CAAC;IApDS,MAAM,CAAC,IAAW;;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3E,OAAO,WAAW,CAAC;QACvB,CAAC;KAAA;IAEK,OAAO,CAAC,EAAU;;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5D,OAAO,IAAI,IAAI,IAAI,CAAC;QACxB,CAAC;KAAA;IAEK,SAAS,CAAC,IAAY;;YACxB,oEAAoE;YACpE,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;IAEK,WAAW,CAAC,MAAc;;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAChE,OAAO,IAAI,IAAI,IAAI,CAAC;QACxB,CAAC;KAAA;IAEK,eAAe,CAAC,UAAkB;;YACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACpE,OAAO,IAAI,IAAI,IAAI,CAAC;QACxB,CAAC;KAAA;IAEK,MAAM,CAAC,EAAU,EAAE,IAAoB;;YACzC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzF,OAAO,WAAW,IAAI,IAAI,CAAC;QAC/B,CAAC;KAAA;IAEK,MAAM,CAAC,EAAU;;YACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5D,OAAO,MAAM,GAAG,CAAC,CAAC;QACtB,CAAC;KAAA;IAEK,MAAM,CAAC,IAAY,EAAE,KAAa;;YACpC,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAElC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEnE,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,UAAU;gBACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aAC5C,CAAC;QACN,CAAC;KAAA;CACJ;AAvDD,0BAuDC"}
1
+ {"version":3,"file":"auth.dao.js","sourceRoot":"","sources":["../../../src/dao/auth/auth.dao.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,0EAA+C;AAE/C,MAAa,OAAO;IAApB;QACU,UAAK,GAAyB,wBAAW,CAAC,aAAa,EAAE,CAAC;IAyDpE,CAAC;IAvDO,MAAM,CAAC,IAAW;;YACtB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3E,OAAO,WAAW,CAAC;QACrB,CAAC;KAAA;IAEK,OAAO,CAAC,EAAU;;YACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5D,OAAO,IAAI,IAAI,IAAI,CAAC;QACtB,CAAC;KAAA;IAEK,SAAS,CAAC,IAAY;;YAC1B,oEAAoE;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,WAAW,CAAC,MAAc;;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAChE,OAAO,IAAI,IAAI,IAAI,CAAC;QACtB,CAAC;KAAA;IAEK,eAAe,CAAC,UAAkB;;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACpE,OAAO,IAAI,IAAI,IAAI,CAAC;QACtB,CAAC;KAAA;IAEK,MAAM,CAAC,EAAU,EAAE,IAAoB;;YAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC3C,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;iBACb,MAAM,CAAC,IAAI,CAAC;iBACZ,SAAS,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,WAAW,IAAI,IAAI,CAAC;QAC7B,CAAC;KAAA;IAEK,MAAM,CAAC,EAAU;;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5D,OAAO,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;KAAA;IAEK,MAAM,CAAC,IAAY,EAAE,KAAa;;YACtC,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAElC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEnE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,UAAU;gBACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aAC1C,CAAC;QACJ,CAAC;KAAA;CACF;AA1DD,0BA0DC"}