@trafficgroup/knex-rel 0.0.29 → 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.
- package/dist/dao/VideoMinuteResultDAO.d.ts +101 -0
- package/dist/dao/VideoMinuteResultDAO.js +366 -0
- package/dist/dao/VideoMinuteResultDAO.js.map +1 -1
- package/dist/interfaces/video/video.interfaces.d.ts +4 -0
- package/migrations/20250910015452_migration.ts +34 -0
- package/package.json +1 -1
- package/src/dao/VideoMinuteResultDAO.ts +517 -0
- package/src/interfaces/video/video.interfaces.ts +9 -0
- package/plan.md +0 -304
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
import { IBaseDAO, IDataPaginator } from "../d.types";
|
|
2
2
|
import { IVideoMinuteResult, IVideoMinuteResultInput } from "../entities/VideoMinuteResult";
|
|
3
|
+
interface ITMCTurnMovements {
|
|
4
|
+
straight: number;
|
|
5
|
+
left: number;
|
|
6
|
+
right: number;
|
|
7
|
+
"u-turn": number;
|
|
8
|
+
[key: string]: number;
|
|
9
|
+
}
|
|
10
|
+
interface ITMCDirections {
|
|
11
|
+
[direction: string]: ITMCTurnMovements;
|
|
12
|
+
}
|
|
13
|
+
interface ITMCVehicles {
|
|
14
|
+
[vehicleClass: string]: ITMCDirections;
|
|
15
|
+
}
|
|
16
|
+
interface ITMCResult {
|
|
17
|
+
vehicles: ITMCVehicles;
|
|
18
|
+
counts: {
|
|
19
|
+
total_vehicles: number;
|
|
20
|
+
entry_vehicles: number;
|
|
21
|
+
};
|
|
22
|
+
total: number;
|
|
23
|
+
totalcount: number;
|
|
24
|
+
detected_classes: {
|
|
25
|
+
[vehicleClass: string]: number;
|
|
26
|
+
};
|
|
27
|
+
study_type: "TMC";
|
|
28
|
+
}
|
|
29
|
+
interface IATRVehicles {
|
|
30
|
+
[vehicleClass: string]: {
|
|
31
|
+
[lane: string]: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
interface IATRResult {
|
|
35
|
+
vehicles: IATRVehicles;
|
|
36
|
+
lane_counts: {
|
|
37
|
+
[lane: string]: number;
|
|
38
|
+
};
|
|
39
|
+
total_count: number;
|
|
40
|
+
detected_classes: {
|
|
41
|
+
[vehicleClass: string]: number;
|
|
42
|
+
};
|
|
43
|
+
study_type: "ATR";
|
|
44
|
+
}
|
|
45
|
+
interface IGroupedResult {
|
|
46
|
+
groupIndex: number;
|
|
47
|
+
startMinute: number;
|
|
48
|
+
endMinute: number;
|
|
49
|
+
label: string;
|
|
50
|
+
results: ITMCResult | IATRResult;
|
|
51
|
+
minuteCount: number;
|
|
52
|
+
}
|
|
53
|
+
interface IGroupedResponse {
|
|
54
|
+
success: boolean;
|
|
55
|
+
data: IGroupedResult[];
|
|
56
|
+
groupingMinutes: number;
|
|
57
|
+
video: {
|
|
58
|
+
uuid: string;
|
|
59
|
+
name: string;
|
|
60
|
+
videoType: string;
|
|
61
|
+
status: string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
3
64
|
export declare class VideoMinuteResultDAO implements IBaseDAO<IVideoMinuteResult> {
|
|
4
65
|
private knex;
|
|
5
66
|
private tableName;
|
|
@@ -44,5 +105,45 @@ export declare class VideoMinuteResultDAO implements IBaseDAO<IVideoMinuteResult
|
|
|
44
105
|
* Get minute results by video UUID (convenience method)
|
|
45
106
|
*/
|
|
46
107
|
getMinuteResultsByVideoUuid(videoUuid: string, startMinute?: number, endMinute?: number, page?: number, limit?: number): Promise<IDataPaginator<IVideoMinuteResult>>;
|
|
108
|
+
/**
|
|
109
|
+
* Get grouped minute results by video UUID with time block aggregation
|
|
110
|
+
* @param videoUuid - The UUID of the video
|
|
111
|
+
* @param groupingMinutes - Number of minutes to group together (1, 5, 10, 15, 30, 60)
|
|
112
|
+
* @param startMinute - Optional start minute filter
|
|
113
|
+
* @param endMinute - Optional end minute filter
|
|
114
|
+
*/
|
|
115
|
+
getGroupedMinuteResultsByVideoUuid(videoUuid: string, groupingMinutes?: number, startMinute?: number, endMinute?: number): Promise<IGroupedResponse>;
|
|
116
|
+
/**
|
|
117
|
+
* Aggregate minute results based on video type (TMC or ATR)
|
|
118
|
+
*/
|
|
119
|
+
private aggregateMinuteResults;
|
|
120
|
+
/**
|
|
121
|
+
* Aggregate TMC (Turning Movement Count) results
|
|
122
|
+
*/
|
|
123
|
+
private aggregateTMCResults;
|
|
124
|
+
/**
|
|
125
|
+
* Aggregate ATR (Automatic Traffic Recorder) results
|
|
126
|
+
*/
|
|
127
|
+
private aggregateATRResults;
|
|
128
|
+
/**
|
|
129
|
+
* Generic aggregation for other video types
|
|
130
|
+
*/
|
|
131
|
+
private aggregateGenericResults;
|
|
132
|
+
/**
|
|
133
|
+
* Recursively sum numeric values in nested objects
|
|
134
|
+
*/
|
|
135
|
+
private sumNumericValues;
|
|
136
|
+
/**
|
|
137
|
+
* Deep clone a result structure, setting all numeric values to 0
|
|
138
|
+
*/
|
|
139
|
+
private deepCloneStructure;
|
|
140
|
+
/**
|
|
141
|
+
* Normalize ATR vehicle class names to standard format for frontend compatibility
|
|
142
|
+
*/
|
|
143
|
+
private normalizeATRVehicleClass;
|
|
144
|
+
/**
|
|
145
|
+
* Format time label for display (HH:MM:SS format)
|
|
146
|
+
*/
|
|
147
|
+
private formatTimeLabel;
|
|
47
148
|
}
|
|
48
149
|
export default VideoMinuteResultDAO;
|
|
@@ -232,6 +232,372 @@ class VideoMinuteResultDAO {
|
|
|
232
232
|
};
|
|
233
233
|
});
|
|
234
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
|
+
}
|
|
235
601
|
}
|
|
236
602
|
exports.VideoMinuteResultDAO = VideoMinuteResultDAO;
|
|
237
603
|
exports.default = VideoMinuteResultDAO;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoMinuteResultDAO.js","sourceRoot":"","sources":["../../src/dao/VideoMinuteResultDAO.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VideoMinuteResultDAO.js","sourceRoot":"","sources":["../../src/dao/VideoMinuteResultDAO.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,10 @@ export interface IVideo {
|
|
|
15
15
|
remainingTime: string;
|
|
16
16
|
results: Record<string, any>;
|
|
17
17
|
durationSeconds?: number;
|
|
18
|
+
isHlsEnabled: boolean;
|
|
19
|
+
hlsPlaylist: string | null;
|
|
20
|
+
videoSizeMB: number | null;
|
|
21
|
+
streamingMetadata: Record<string, any> | null;
|
|
18
22
|
created_at: string;
|
|
19
23
|
updated_at: string;
|
|
20
24
|
folder?: IFolder;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Knex } from "knex";
|
|
2
|
+
|
|
3
|
+
export async function up(knex: Knex): Promise<void> {
|
|
4
|
+
await knex.schema.alterTable("video", (table) => {
|
|
5
|
+
table
|
|
6
|
+
.boolean("isHlsEnabled")
|
|
7
|
+
.defaultTo(false)
|
|
8
|
+
.comment("Whether HLS streaming is enabled for this video");
|
|
9
|
+
table
|
|
10
|
+
.text("hlsPlaylist")
|
|
11
|
+
.nullable()
|
|
12
|
+
.comment("S3 path to the HLS master playlist file");
|
|
13
|
+
table
|
|
14
|
+
.decimal("videoSizeMB", 12, 2)
|
|
15
|
+
.nullable()
|
|
16
|
+
.comment("Final processed video size in MB");
|
|
17
|
+
|
|
18
|
+
table
|
|
19
|
+
.json("streamingMetadata")
|
|
20
|
+
.nullable()
|
|
21
|
+
.comment(
|
|
22
|
+
"Additional streaming metadata (quality levels, segment info, etc.)",
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function down(knex: Knex): Promise<void> {
|
|
28
|
+
await knex.schema.alterTable("video", (table) => {
|
|
29
|
+
table.dropColumn("isHlsEnabled");
|
|
30
|
+
table.dropColumn("hlsPlaylist");
|
|
31
|
+
table.dropColumn("videoSizeMB");
|
|
32
|
+
table.dropColumn("streamingMetadata");
|
|
33
|
+
});
|
|
34
|
+
}
|