@tmscloud/tbt-knex 0.0.5 → 0.0.7
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/api-key/api-key.dao.d.ts +19 -0
- package/dist/dao/api-key/api-key.dao.js +215 -0
- package/dist/dao/api-key/api-key.dao.js.map +1 -0
- package/dist/dao/driver-tracking/driver-tracking.dao.d.ts +15 -0
- package/dist/dao/driver-tracking/driver-tracking.dao.js +68 -20
- package/dist/dao/driver-tracking/driver-tracking.dao.js.map +1 -1
- package/dist/dao/duty/duty.dao.d.ts +7 -0
- package/dist/dao/duty/duty.dao.js +36 -0
- package/dist/dao/duty/duty.dao.js.map +1 -1
- package/dist/dao/duty-item-progress/duty-item-progress.dao.d.ts +22 -0
- package/dist/dao/duty-item-progress/duty-item-progress.dao.js +103 -0
- package/dist/dao/duty-item-progress/duty-item-progress.dao.js.map +1 -1
- package/dist/dao/duty-track/duty-track.dao.d.ts +7 -0
- package/dist/dao/duty-track/duty-track.dao.js +55 -0
- package/dist/dao/duty-track/duty-track.dao.js.map +1 -1
- package/dist/dao/password-history/password-history.dao.d.ts +19 -0
- package/dist/dao/password-history/password-history.dao.js +78 -0
- package/dist/dao/password-history/password-history.dao.js.map +1 -0
- package/dist/dao/password-reset/password-reset.dao.d.ts +9 -0
- package/dist/dao/password-reset/password-reset.dao.js +69 -0
- package/dist/dao/password-reset/password-reset.dao.js.map +1 -0
- package/dist/dao/route/route.dao.d.ts +4 -0
- package/dist/dao/route/route.dao.js +18 -0
- package/dist/dao/route/route.dao.js.map +1 -1
- package/dist/dao/trip-track/trip-track.dao.d.ts +7 -0
- package/dist/dao/trip-track/trip-track.dao.js +55 -0
- package/dist/dao/trip-track/trip-track.dao.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/api-key/api-key.interfaces.d.ts +28 -0
- package/dist/interfaces/api-key/api-key.interfaces.js +3 -0
- package/dist/interfaces/api-key/api-key.interfaces.js.map +1 -0
- package/dist/interfaces/driver-tracking/driver-tracking.interfaces.d.ts +2 -0
- package/dist/interfaces/duty-item-progress/duty-item-progress.interfaces.d.ts +4 -2
- package/dist/interfaces/password-reset/password-reset.interfaces.d.ts +9 -0
- package/dist/interfaces/password-reset/password-reset.interfaces.js +3 -0
- package/dist/interfaces/password-reset/password-reset.interfaces.js.map +1 -0
- package/dist/interfaces/route/route.interfaces.d.ts +1 -0
- package/package.json +1 -1
|
@@ -113,6 +113,109 @@ class DutyItemProgressDAO {
|
|
|
113
113
|
return result || null;
|
|
114
114
|
});
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Create a single code-injected item progress record
|
|
118
|
+
*/
|
|
119
|
+
createCodeInjectedItem(data, trx) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
+
const qb = trx || this.knex;
|
|
122
|
+
const [created] = yield qb("duty_item_progress")
|
|
123
|
+
.insert({
|
|
124
|
+
duty_id: data.duty_id,
|
|
125
|
+
template_item_id: null,
|
|
126
|
+
route_id: data.route_id,
|
|
127
|
+
item_order: data.item_order,
|
|
128
|
+
status: "pending",
|
|
129
|
+
loop_count: 0,
|
|
130
|
+
})
|
|
131
|
+
.returning("*");
|
|
132
|
+
return created;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Delete a code-injected item (safety: only deletes items with template_item_id IS NULL)
|
|
137
|
+
*/
|
|
138
|
+
deleteCodeInjectedItem(id, trx) {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
const qb = trx || this.knex;
|
|
141
|
+
const result = yield qb("duty_item_progress")
|
|
142
|
+
.where("id", id)
|
|
143
|
+
.whereNull("template_item_id")
|
|
144
|
+
.delete();
|
|
145
|
+
return result > 0;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get all code-injected items for a duty
|
|
150
|
+
*/
|
|
151
|
+
getCodeInjectedByDutyId(dutyId) {
|
|
152
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
return this.knex("duty_item_progress")
|
|
154
|
+
.where("duty_id", dutyId)
|
|
155
|
+
.whereNull("template_item_id")
|
|
156
|
+
.orderBy("item_order", "asc");
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Inject a code-route into a duty's item list.
|
|
161
|
+
* Handles removing a previous injection, reverting the current item,
|
|
162
|
+
* shifting item orders, and inserting the new item — all in a transaction.
|
|
163
|
+
*/
|
|
164
|
+
injectRouteItem(dutyId, routeId, trx) {
|
|
165
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
if (!trx) {
|
|
167
|
+
return this.knex.transaction((t) => this.injectRouteItem(dutyId, routeId, t));
|
|
168
|
+
}
|
|
169
|
+
const allItems = yield trx("duty_item_progress")
|
|
170
|
+
.where("duty_id", dutyId)
|
|
171
|
+
.orderBy("item_order", "asc");
|
|
172
|
+
const previousInjection = allItems.find((i) => i.route_id != null &&
|
|
173
|
+
i.template_item_id == null &&
|
|
174
|
+
(i.status === "pending" || i.status === "in_progress"));
|
|
175
|
+
if (previousInjection) {
|
|
176
|
+
yield trx("duty_item_progress")
|
|
177
|
+
.where("id", previousInjection.id)
|
|
178
|
+
.delete();
|
|
179
|
+
yield trx("duty_item_progress")
|
|
180
|
+
.where("duty_id", dutyId)
|
|
181
|
+
.where("item_order", ">", previousInjection.item_order)
|
|
182
|
+
.decrement("item_order", 1);
|
|
183
|
+
}
|
|
184
|
+
const freshItems = yield trx("duty_item_progress")
|
|
185
|
+
.where("duty_id", dutyId)
|
|
186
|
+
.orderBy("item_order", "asc");
|
|
187
|
+
const currentItem = freshItems.find((i) => i.status === "in_progress") ||
|
|
188
|
+
freshItems.find((i) => i.status === "pending");
|
|
189
|
+
const insertOrder = currentItem ? currentItem.item_order : 0;
|
|
190
|
+
if (currentItem && currentItem.status === "in_progress") {
|
|
191
|
+
yield trx("duty_item_progress")
|
|
192
|
+
.where("id", currentItem.id)
|
|
193
|
+
.update({
|
|
194
|
+
status: "pending",
|
|
195
|
+
started_at: null,
|
|
196
|
+
completed_at: null,
|
|
197
|
+
updated_at: new Date(),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (freshItems.length > 0) {
|
|
201
|
+
yield trx("duty_item_progress")
|
|
202
|
+
.where("duty_id", dutyId)
|
|
203
|
+
.where("item_order", ">=", insertOrder)
|
|
204
|
+
.increment("item_order", 1);
|
|
205
|
+
}
|
|
206
|
+
const [created] = yield trx("duty_item_progress")
|
|
207
|
+
.insert({
|
|
208
|
+
duty_id: dutyId,
|
|
209
|
+
route_id: routeId,
|
|
210
|
+
template_item_id: null,
|
|
211
|
+
item_order: insertOrder,
|
|
212
|
+
status: "pending",
|
|
213
|
+
loop_count: 0,
|
|
214
|
+
})
|
|
215
|
+
.returning("*");
|
|
216
|
+
return created;
|
|
217
|
+
});
|
|
218
|
+
}
|
|
116
219
|
/**
|
|
117
220
|
* Delete all progress records for a duty
|
|
118
221
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duty-item-progress.dao.js","sourceRoot":"","sources":["../../../src/dao/duty-item-progress/duty-item-progress.dao.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"duty-item-progress.dao.js","sourceRoot":"","sources":["../../../src/dao/duty-item-progress/duty-item-progress.dao.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,13 @@ export declare class DutyTrackDAO {
|
|
|
38
38
|
*/
|
|
39
39
|
private calculateDistance;
|
|
40
40
|
private toRad;
|
|
41
|
+
/**
|
|
42
|
+
* Consolidate a duty's tracking data in a single transaction:
|
|
43
|
+
* reads raw points, computes stats, inserts track record,
|
|
44
|
+
* deletes granular points, and marks the duty as consolidated.
|
|
45
|
+
* Returns null if there were no tracking points.
|
|
46
|
+
*/
|
|
47
|
+
consolidateFromTracking(dutyId: number): Promise<IDutyTrack | null>;
|
|
41
48
|
/**
|
|
42
49
|
* Parse JSONB fields from database result
|
|
43
50
|
*/
|
|
@@ -179,6 +179,61 @@ class DutyTrackDAO {
|
|
|
179
179
|
toRad(deg) {
|
|
180
180
|
return deg * (Math.PI / 180);
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Consolidate a duty's tracking data in a single transaction:
|
|
184
|
+
* reads raw points, computes stats, inserts track record,
|
|
185
|
+
* deletes granular points, and marks the duty as consolidated.
|
|
186
|
+
* Returns null if there were no tracking points.
|
|
187
|
+
*/
|
|
188
|
+
consolidateFromTracking(dutyId) {
|
|
189
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
190
|
+
const knex = this.knex;
|
|
191
|
+
return knex.transaction((trx) => __awaiter(this, void 0, void 0, function* () {
|
|
192
|
+
const rawPoints = yield trx("driver_tracking")
|
|
193
|
+
.where("duty_id", dutyId)
|
|
194
|
+
.orderBy("recorded_at", "asc");
|
|
195
|
+
const trackPoints = rawPoints.map((p) => ({
|
|
196
|
+
lat: Number(p.latitude),
|
|
197
|
+
lng: Number(p.longitude),
|
|
198
|
+
altitude: p.altitude ? Number(p.altitude) : null,
|
|
199
|
+
speed: p.speed ? Number(p.speed) : null,
|
|
200
|
+
heading: p.heading ? Number(p.heading) : null,
|
|
201
|
+
accuracy: p.accuracy ? Number(p.accuracy) : null,
|
|
202
|
+
recorded_at: typeof p.recorded_at === "string"
|
|
203
|
+
? p.recorded_at
|
|
204
|
+
: p.recorded_at.toISOString(),
|
|
205
|
+
}));
|
|
206
|
+
let dutyTrack = null;
|
|
207
|
+
if (trackPoints.length > 0) {
|
|
208
|
+
const stats = this.computeStatistics(trackPoints);
|
|
209
|
+
const [created] = yield trx("duty_track")
|
|
210
|
+
.insert({
|
|
211
|
+
duty_id: dutyId,
|
|
212
|
+
track_data: JSON.stringify(trackPoints),
|
|
213
|
+
max_speed: stats.max_speed,
|
|
214
|
+
max_altitude: stats.max_altitude,
|
|
215
|
+
total_distance: stats.total_distance,
|
|
216
|
+
total_points: stats.total_points,
|
|
217
|
+
start_coords: stats.start_coords
|
|
218
|
+
? JSON.stringify(stats.start_coords)
|
|
219
|
+
: null,
|
|
220
|
+
end_coords: stats.end_coords
|
|
221
|
+
? JSON.stringify(stats.end_coords)
|
|
222
|
+
: null,
|
|
223
|
+
duration_seconds: stats.duration_seconds,
|
|
224
|
+
})
|
|
225
|
+
.returning("*");
|
|
226
|
+
dutyTrack = this.parseJson(created);
|
|
227
|
+
yield trx("driver_tracking").where("duty_id", dutyId).delete();
|
|
228
|
+
}
|
|
229
|
+
yield trx("duties").where("id", dutyId).update({
|
|
230
|
+
tracking_status: "consolidated",
|
|
231
|
+
updated_at: new Date(),
|
|
232
|
+
});
|
|
233
|
+
return dutyTrack;
|
|
234
|
+
}));
|
|
235
|
+
});
|
|
236
|
+
}
|
|
182
237
|
/**
|
|
183
238
|
* Parse JSONB fields from database result
|
|
184
239
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duty-track.dao.js","sourceRoot":"","sources":["../../../src/dao/duty-track/duty-track.dao.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"duty-track.dao.js","sourceRoot":"","sources":["../../../src/dao/duty-track/duty-track.dao.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IPasswordHistory } from "../../interfaces/password-reset/password-reset.interfaces";
|
|
2
|
+
export declare class PasswordHistoryDAO {
|
|
3
|
+
private _knex?;
|
|
4
|
+
private get knex();
|
|
5
|
+
/**
|
|
6
|
+
* Add password to history
|
|
7
|
+
*/
|
|
8
|
+
create(data: IPasswordHistory): Promise<IPasswordHistory>;
|
|
9
|
+
/**
|
|
10
|
+
* Get recent password hashes for a user
|
|
11
|
+
* Used to prevent password reuse
|
|
12
|
+
*/
|
|
13
|
+
getRecentForUser(userId: number, limit?: number): Promise<IPasswordHistory[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Cleanup old password history
|
|
16
|
+
* Keep only the most recent N passwords per user
|
|
17
|
+
*/
|
|
18
|
+
cleanupOldPasswords(keepCount?: number): Promise<number>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
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.PasswordHistoryDAO = void 0;
|
|
16
|
+
const KnexConnection_1 = __importDefault(require("../../KnexConnection"));
|
|
17
|
+
class PasswordHistoryDAO {
|
|
18
|
+
get knex() {
|
|
19
|
+
if (!this._knex) {
|
|
20
|
+
this._knex = KnexConnection_1.default.getConnection();
|
|
21
|
+
}
|
|
22
|
+
return this._knex;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Add password to history
|
|
26
|
+
*/
|
|
27
|
+
create(data) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const [result] = yield this.knex("password_history")
|
|
30
|
+
.insert({
|
|
31
|
+
user_id: data.user_id,
|
|
32
|
+
password_hash: data.password_hash,
|
|
33
|
+
})
|
|
34
|
+
.returning("*");
|
|
35
|
+
return result;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get recent password hashes for a user
|
|
40
|
+
* Used to prevent password reuse
|
|
41
|
+
*/
|
|
42
|
+
getRecentForUser(userId_1) {
|
|
43
|
+
return __awaiter(this, arguments, void 0, function* (userId, limit = 5) {
|
|
44
|
+
return yield this.knex("password_history")
|
|
45
|
+
.where("user_id", userId)
|
|
46
|
+
.orderBy("created_at", "desc")
|
|
47
|
+
.limit(limit);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Cleanup old password history
|
|
52
|
+
* Keep only the most recent N passwords per user
|
|
53
|
+
*/
|
|
54
|
+
cleanupOldPasswords() {
|
|
55
|
+
return __awaiter(this, arguments, void 0, function* (keepCount = 10) {
|
|
56
|
+
// Subquery to get IDs to keep
|
|
57
|
+
const idsToKeep = this.knex("password_history as ph1")
|
|
58
|
+
.select("ph1.id")
|
|
59
|
+
.whereRaw(`
|
|
60
|
+
ph1.id IN (
|
|
61
|
+
SELECT id FROM (
|
|
62
|
+
SELECT id FROM password_history ph2
|
|
63
|
+
WHERE ph2.user_id = ph1.user_id
|
|
64
|
+
ORDER BY created_at DESC
|
|
65
|
+
LIMIT ?
|
|
66
|
+
) as recent
|
|
67
|
+
)
|
|
68
|
+
`, [keepCount]);
|
|
69
|
+
// Delete all records not in the keep list
|
|
70
|
+
const result = yield this.knex("password_history")
|
|
71
|
+
.whereNotIn("id", idsToKeep)
|
|
72
|
+
.delete();
|
|
73
|
+
return result;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.PasswordHistoryDAO = PasswordHistoryDAO;
|
|
78
|
+
//# sourceMappingURL=password-history.dao.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-history.dao.js","sourceRoot":"","sources":["../../../src/dao/password-history/password-history.dao.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,0EAA+C;AAG/C,MAAa,kBAAkB;IAG7B,IAAY,IAAI;QACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,wBAAW,CAAC,aAAa,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACG,MAAM,CAAC,IAAsB;;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;iBACjD,MAAM,CAAC;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC;iBACD,SAAS,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAED;;;OAGG;IACG,gBAAgB;6DACpB,MAAc,EACd,QAAgB,CAAC;YAEjB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;iBACvC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;iBACxB,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;iBAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;KAAA;IAED;;;OAGG;IACG,mBAAmB;6DAAC,YAAoB,EAAE;YAC9C,8BAA8B;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;iBACnD,MAAM,CAAC,QAAQ,CAAC;iBAChB,QAAQ,CAAC;;;;;;;;;OAST,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAElB,0CAA0C;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;iBAC/C,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;iBAC3B,MAAM,EAAE,CAAC;YAEZ,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;CACF;AAhED,gDAgEC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IPasswordResetToken } from "../../interfaces/password-reset/password-reset.interfaces";
|
|
2
|
+
export declare class PasswordResetDAO {
|
|
3
|
+
private _knex?;
|
|
4
|
+
private get knex();
|
|
5
|
+
create(data: IPasswordResetToken): Promise<IPasswordResetToken>;
|
|
6
|
+
getByTokenHash(tokenHash: string): Promise<IPasswordResetToken | null>;
|
|
7
|
+
markAsUsed(id: number): Promise<boolean>;
|
|
8
|
+
countRecentRequests(email: string, minutes?: number): Promise<number>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
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.PasswordResetDAO = void 0;
|
|
16
|
+
const KnexConnection_1 = __importDefault(require("../../KnexConnection"));
|
|
17
|
+
class PasswordResetDAO {
|
|
18
|
+
get knex() {
|
|
19
|
+
if (!this._knex) {
|
|
20
|
+
this._knex = KnexConnection_1.default.getConnection();
|
|
21
|
+
}
|
|
22
|
+
return this._knex;
|
|
23
|
+
}
|
|
24
|
+
create(data) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
const [result] = yield this.knex("password_reset_tokens")
|
|
27
|
+
.insert({
|
|
28
|
+
user_id: data.user_id,
|
|
29
|
+
token_hash: data.token_hash,
|
|
30
|
+
email: data.email,
|
|
31
|
+
expires_at: data.expires_at,
|
|
32
|
+
})
|
|
33
|
+
.returning("*");
|
|
34
|
+
return result;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
getByTokenHash(tokenHash) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const result = yield this.knex("password_reset_tokens")
|
|
40
|
+
.select("*")
|
|
41
|
+
.where("token_hash", tokenHash)
|
|
42
|
+
.where("is_used", false)
|
|
43
|
+
.where("expires_at", ">", new Date())
|
|
44
|
+
.first();
|
|
45
|
+
return result || null;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
markAsUsed(id) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const result = yield this.knex("password_reset_tokens")
|
|
51
|
+
.where("id", id)
|
|
52
|
+
.update({ is_used: true });
|
|
53
|
+
return result > 0;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
countRecentRequests(email_1) {
|
|
57
|
+
return __awaiter(this, arguments, void 0, function* (email, minutes = 60) {
|
|
58
|
+
const since = new Date(Date.now() - minutes * 60 * 1000);
|
|
59
|
+
const result = yield this.knex("password_reset_tokens")
|
|
60
|
+
.where("email", email)
|
|
61
|
+
.where("created_at", ">=", since)
|
|
62
|
+
.count("* as count")
|
|
63
|
+
.first();
|
|
64
|
+
return Number((result === null || result === void 0 ? void 0 : result.count) || 0);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.PasswordResetDAO = PasswordResetDAO;
|
|
69
|
+
//# sourceMappingURL=password-reset.dao.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset.dao.js","sourceRoot":"","sources":["../../../src/dao/password-reset/password-reset.dao.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,0EAA+C;AAG/C,MAAa,gBAAgB;IAG3B,IAAY,IAAI;QACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,wBAAW,CAAC,aAAa,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEK,MAAM,CAAC,IAAyB;;YACpC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;iBACtD,MAAM,CAAC;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC;iBACD,SAAS,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAEK,cAAc,CAAC,SAAiB;;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;iBACpD,MAAM,CAAC,GAAG,CAAC;iBACX,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC;iBAC9B,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;iBACvB,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;iBACpC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,IAAI,IAAI,CAAC;QACxB,CAAC;KAAA;IAEK,UAAU,CAAC,EAAU;;YACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;iBACpD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;iBACf,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7B,OAAO,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;KAAA;IAEK,mBAAmB;6DAAC,KAAa,EAAE,UAAkB,EAAE;YAC3D,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;iBACpD,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;iBACrB,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC;iBAChC,KAAK,CAAC,YAAY,CAAC;iBACnB,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,KAAI,CAAC,CAAC,CAAC;QACpC,CAAC;KAAA;CACF;AAhDD,4CAgDC"}
|
|
@@ -19,6 +19,10 @@ export declare class RouteDAO implements IBaseDAO<IRoute> {
|
|
|
19
19
|
* Get route by UUID with joined event data
|
|
20
20
|
*/
|
|
21
21
|
getByUuid(uuid: string): Promise<IRoute | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Get route by code within an event (case-insensitive)
|
|
24
|
+
*/
|
|
25
|
+
getByCodeAndEventId(code: string, eventId: number): Promise<IRoute | null>;
|
|
22
26
|
/**
|
|
23
27
|
* Create a new route
|
|
24
28
|
*/
|
|
@@ -96,6 +96,21 @@ class RouteDAO {
|
|
|
96
96
|
return result ? this.parseRouteJson(result) : null;
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Get route by code within an event (case-insensitive)
|
|
101
|
+
*/
|
|
102
|
+
getByCodeAndEventId(code, eventId) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const result = yield this.knex("routes as r")
|
|
105
|
+
.leftJoin("events as e", "r.event_id", "e.id")
|
|
106
|
+
.select("r.*", this.knex.raw("to_jsonb(e.*) as event"))
|
|
107
|
+
.whereRaw("LOWER(r.code) = LOWER(?)", [code])
|
|
108
|
+
.where("r.event_id", eventId)
|
|
109
|
+
.where("r.is_active", true)
|
|
110
|
+
.first();
|
|
111
|
+
return result ? this.parseRouteJson(result) : null;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
99
114
|
/**
|
|
100
115
|
* Create a new route
|
|
101
116
|
*/
|
|
@@ -112,6 +127,7 @@ class RouteDAO {
|
|
|
112
127
|
distance: data.distance,
|
|
113
128
|
estimated_duration: data.estimated_duration,
|
|
114
129
|
event_id: data.event_id,
|
|
130
|
+
code: data.code || null,
|
|
115
131
|
is_active: data.is_active !== undefined ? data.is_active : true,
|
|
116
132
|
})
|
|
117
133
|
.returning("*");
|
|
@@ -143,6 +159,8 @@ class RouteDAO {
|
|
|
143
159
|
updateData.event_id = data.event_id;
|
|
144
160
|
if (data.is_active !== undefined)
|
|
145
161
|
updateData.is_active = data.is_active;
|
|
162
|
+
if (data.code !== undefined)
|
|
163
|
+
updateData.code = data.code;
|
|
146
164
|
updateData.updated_at = new Date();
|
|
147
165
|
const [result] = yield this.knex("routes")
|
|
148
166
|
.where("id", id)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.dao.js","sourceRoot":"","sources":["../../../src/dao/route/route.dao.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"route.dao.js","sourceRoot":"","sources":["../../../src/dao/route/route.dao.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,13 @@ export declare class TripTrackDAO {
|
|
|
42
42
|
* Get consolidated trip history with filters and pagination
|
|
43
43
|
*/
|
|
44
44
|
getConsolidatedHistory(filters: IConsolidatedTripFilters, page: number, limit: number): Promise<IDataPaginator<IConsolidatedTripHistory>>;
|
|
45
|
+
/**
|
|
46
|
+
* Consolidate a trip's tracking data in a single transaction:
|
|
47
|
+
* reads raw points, computes stats, inserts track record,
|
|
48
|
+
* deletes granular points, and marks the trip as consolidated.
|
|
49
|
+
* Returns null if there were no tracking points.
|
|
50
|
+
*/
|
|
51
|
+
consolidateFromTracking(tripId: number): Promise<ITripTrack | null>;
|
|
45
52
|
/**
|
|
46
53
|
* Parse JSONB fields from database result
|
|
47
54
|
*/
|
|
@@ -231,6 +231,61 @@ class TripTrackDAO {
|
|
|
231
231
|
};
|
|
232
232
|
});
|
|
233
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Consolidate a trip's tracking data in a single transaction:
|
|
236
|
+
* reads raw points, computes stats, inserts track record,
|
|
237
|
+
* deletes granular points, and marks the trip as consolidated.
|
|
238
|
+
* Returns null if there were no tracking points.
|
|
239
|
+
*/
|
|
240
|
+
consolidateFromTracking(tripId) {
|
|
241
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
242
|
+
const knex = this.knex;
|
|
243
|
+
return knex.transaction((trx) => __awaiter(this, void 0, void 0, function* () {
|
|
244
|
+
const rawPoints = yield trx("driver_tracking")
|
|
245
|
+
.where("trip_id", tripId)
|
|
246
|
+
.orderBy("recorded_at", "asc");
|
|
247
|
+
const trackPoints = rawPoints.map((p) => ({
|
|
248
|
+
lat: Number(p.latitude),
|
|
249
|
+
lng: Number(p.longitude),
|
|
250
|
+
altitude: p.altitude ? Number(p.altitude) : null,
|
|
251
|
+
speed: p.speed ? Number(p.speed) : null,
|
|
252
|
+
heading: p.heading ? Number(p.heading) : null,
|
|
253
|
+
accuracy: p.accuracy ? Number(p.accuracy) : null,
|
|
254
|
+
recorded_at: typeof p.recorded_at === "string"
|
|
255
|
+
? p.recorded_at
|
|
256
|
+
: p.recorded_at.toISOString(),
|
|
257
|
+
}));
|
|
258
|
+
let tripTrack = null;
|
|
259
|
+
if (trackPoints.length > 0) {
|
|
260
|
+
const stats = this.computeStatistics(trackPoints);
|
|
261
|
+
const [created] = yield trx("trip_track")
|
|
262
|
+
.insert({
|
|
263
|
+
trip_id: tripId,
|
|
264
|
+
track_data: JSON.stringify(trackPoints),
|
|
265
|
+
max_speed: stats.max_speed,
|
|
266
|
+
max_altitude: stats.max_altitude,
|
|
267
|
+
total_distance: stats.total_distance,
|
|
268
|
+
total_points: stats.total_points,
|
|
269
|
+
start_coords: stats.start_coords
|
|
270
|
+
? JSON.stringify(stats.start_coords)
|
|
271
|
+
: null,
|
|
272
|
+
end_coords: stats.end_coords
|
|
273
|
+
? JSON.stringify(stats.end_coords)
|
|
274
|
+
: null,
|
|
275
|
+
duration_seconds: stats.duration_seconds,
|
|
276
|
+
})
|
|
277
|
+
.returning("*");
|
|
278
|
+
tripTrack = this.parseJson(created);
|
|
279
|
+
yield trx("driver_tracking").where("trip_id", tripId).delete();
|
|
280
|
+
}
|
|
281
|
+
yield trx("trips").where("id", tripId).update({
|
|
282
|
+
tracking_status: "consolidated",
|
|
283
|
+
updated_at: new Date(),
|
|
284
|
+
});
|
|
285
|
+
return tripTrack;
|
|
286
|
+
}));
|
|
287
|
+
});
|
|
288
|
+
}
|
|
234
289
|
/**
|
|
235
290
|
* Parse JSONB fields from database result
|
|
236
291
|
*/
|