tabletcommand-backend-models 7.1.1 → 7.2.1

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 (210) hide show
  1. package/build/helpers.js +5 -1
  2. package/build/helpers.js.map +1 -1
  3. package/build/index.js +2 -1
  4. package/build/index.js.map +1 -1
  5. package/build/models/action-log.js +6 -0
  6. package/build/models/action-log.js.map +1 -1
  7. package/build/models/agency.js +35 -0
  8. package/build/models/agency.js.map +1 -1
  9. package/build/models/arcgis-group.js +9 -1
  10. package/build/models/arcgis-group.js.map +1 -1
  11. package/build/models/assignment.js +21 -4
  12. package/build/models/assignment.js.map +1 -1
  13. package/build/models/battalion.js +39 -15
  14. package/build/models/battalion.js.map +1 -1
  15. package/build/models/beacon-log.js +5 -1
  16. package/build/models/beacon-log.js.map +1 -1
  17. package/build/models/cad-incident-block.js +7 -1
  18. package/build/models/cad-incident-block.js.map +1 -1
  19. package/build/models/cad-incident-stream.js +27 -1
  20. package/build/models/cad-incident-stream.js.map +1 -1
  21. package/build/models/cad-incident.js +98 -1
  22. package/build/models/cad-incident.js.map +1 -1
  23. package/build/models/cad-simulation.js +0 -2
  24. package/build/models/cad-simulation.js.map +1 -1
  25. package/build/models/cad-status-map.js +5 -1
  26. package/build/models/cad-status-map.js.map +1 -1
  27. package/build/models/cad-status.js +11 -2
  28. package/build/models/cad-status.js.map +1 -1
  29. package/build/models/cad-vehicle-status-history.js +41 -2
  30. package/build/models/cad-vehicle-status-history.js.map +1 -1
  31. package/build/models/cad-vehicle-status.js +44 -2
  32. package/build/models/cad-vehicle-status.js.map +1 -1
  33. package/build/models/cad-vehicle.js +30 -2
  34. package/build/models/cad-vehicle.js.map +1 -1
  35. package/build/models/chart-device-stats.js +7 -1
  36. package/build/models/chart-device-stats.js.map +1 -1
  37. package/build/models/chart-incident.js +12 -1
  38. package/build/models/chart-incident.js.map +1 -1
  39. package/build/models/chart-managed-incident.js +19 -1
  40. package/build/models/chart-managed-incident.js.map +1 -1
  41. package/build/models/chart-user.js +12 -1
  42. package/build/models/chart-user.js.map +1 -1
  43. package/build/models/checklist-item.js +0 -1
  44. package/build/models/checklist-item.js.map +1 -1
  45. package/build/models/checklist.js +26 -4
  46. package/build/models/checklist.js.map +1 -1
  47. package/build/models/csv-import.js +6 -0
  48. package/build/models/csv-import.js.map +1 -1
  49. package/build/models/department.js +129 -6
  50. package/build/models/department.js.map +1 -1
  51. package/build/models/device-mapping.js +16 -0
  52. package/build/models/device-mapping.js.map +1 -1
  53. package/build/models/esri.js +6 -0
  54. package/build/models/esri.js.map +1 -1
  55. package/build/models/incident-event.js +38 -6
  56. package/build/models/incident-event.js.map +1 -1
  57. package/build/models/incident-notified.js +20 -1
  58. package/build/models/incident-notified.js.map +1 -1
  59. package/build/models/incident-takeover.js +6 -1
  60. package/build/models/incident-takeover.js.map +1 -1
  61. package/build/models/location.js +117 -6
  62. package/build/models/location.js.map +1 -1
  63. package/build/models/mail-log.js +5 -0
  64. package/build/models/mail-log.js.map +1 -1
  65. package/build/models/managed-incident.js +67 -4
  66. package/build/models/managed-incident.js.map +1 -1
  67. package/build/models/mark43-incident-retry.js +0 -1
  68. package/build/models/mark43-incident-retry.js.map +1 -1
  69. package/build/models/message.js +19 -1
  70. package/build/models/message.js.map +1 -1
  71. package/build/models/monitor.js +15 -1
  72. package/build/models/monitor.js.map +1 -1
  73. package/build/models/personnel-import.js +74 -0
  74. package/build/models/personnel-import.js.map +1 -1
  75. package/build/models/personnel-known.js +8 -0
  76. package/build/models/personnel-known.js.map +1 -1
  77. package/build/models/rate-limit.js +6 -0
  78. package/build/models/rate-limit.js.map +1 -1
  79. package/build/models/remote-log-stream.js +0 -1
  80. package/build/models/remote-log-stream.js.map +1 -1
  81. package/build/models/remote-log.js +0 -1
  82. package/build/models/remote-log.js.map +1 -1
  83. package/build/models/schema/agency-saml.js +1 -1
  84. package/build/models/schema/agency-saml.js.map +1 -1
  85. package/build/models/schema/cad-incident.js +0 -1
  86. package/build/models/schema/cad-incident.js.map +1 -1
  87. package/build/models/session.js +44 -6
  88. package/build/models/session.js.map +1 -1
  89. package/build/models/template.js +17 -7
  90. package/build/models/template.js.map +1 -1
  91. package/build/models/user-device.js +17 -0
  92. package/build/models/user-device.js.map +1 -1
  93. package/build/models/user-registration.js +5 -1
  94. package/build/models/user-registration.js.map +1 -1
  95. package/build/models/user.js +59 -6
  96. package/build/models/user.js.map +1 -1
  97. package/build/models/validation-report.js +6 -1
  98. package/build/models/validation-report.js.map +1 -1
  99. package/build/test/location.js +1 -1
  100. package/build/test/location.js.map +1 -1
  101. package/build/test/mock.js +5 -2
  102. package/build/test/mock.js.map +1 -1
  103. package/cspell.json +1 -0
  104. package/definitions/helpers.d.ts +27 -26
  105. package/definitions/helpers.d.ts.map +1 -1
  106. package/definitions/index.d.ts +4 -4
  107. package/definitions/index.d.ts.map +1 -1
  108. package/definitions/models/action-log.d.ts.map +1 -1
  109. package/definitions/models/agency.d.ts.map +1 -1
  110. package/definitions/models/arcgis-group.d.ts.map +1 -1
  111. package/definitions/models/assignment.d.ts.map +1 -1
  112. package/definitions/models/battalion.d.ts.map +1 -1
  113. package/definitions/models/beacon-log.d.ts.map +1 -1
  114. package/definitions/models/cad-incident-block.d.ts.map +1 -1
  115. package/definitions/models/cad-incident-stream.d.ts.map +1 -1
  116. package/definitions/models/cad-incident.d.ts.map +1 -1
  117. package/definitions/models/cad-simulation.d.ts.map +1 -1
  118. package/definitions/models/cad-status-map.d.ts.map +1 -1
  119. package/definitions/models/cad-status.d.ts.map +1 -1
  120. package/definitions/models/cad-vehicle-status-history.d.ts.map +1 -1
  121. package/definitions/models/cad-vehicle-status.d.ts.map +1 -1
  122. package/definitions/models/cad-vehicle.d.ts.map +1 -1
  123. package/definitions/models/chart-device-stats.d.ts.map +1 -1
  124. package/definitions/models/chart-incident.d.ts.map +1 -1
  125. package/definitions/models/chart-managed-incident.d.ts.map +1 -1
  126. package/definitions/models/chart-user.d.ts.map +1 -1
  127. package/definitions/models/checklist-item.d.ts.map +1 -1
  128. package/definitions/models/checklist.d.ts.map +1 -1
  129. package/definitions/models/csv-import.d.ts.map +1 -1
  130. package/definitions/models/department.d.ts.map +1 -1
  131. package/definitions/models/device-mapping.d.ts.map +1 -1
  132. package/definitions/models/esri.d.ts.map +1 -1
  133. package/definitions/models/incident-event.d.ts.map +1 -1
  134. package/definitions/models/incident-notified.d.ts.map +1 -1
  135. package/definitions/models/incident-takeover.d.ts.map +1 -1
  136. package/definitions/models/location.d.ts.map +1 -1
  137. package/definitions/models/mail-log.d.ts.map +1 -1
  138. package/definitions/models/managed-incident.d.ts.map +1 -1
  139. package/definitions/models/mark43-incident-retry.d.ts.map +1 -1
  140. package/definitions/models/message.d.ts.map +1 -1
  141. package/definitions/models/monitor.d.ts.map +1 -1
  142. package/definitions/models/personnel-import.d.ts.map +1 -1
  143. package/definitions/models/personnel-known.d.ts.map +1 -1
  144. package/definitions/models/rate-limit.d.ts.map +1 -1
  145. package/definitions/models/remote-log-stream.d.ts.map +1 -1
  146. package/definitions/models/remote-log.d.ts.map +1 -1
  147. package/definitions/models/schema/cad-incident.d.ts.map +1 -1
  148. package/definitions/models/session.d.ts.map +1 -1
  149. package/definitions/models/template.d.ts.map +1 -1
  150. package/definitions/models/user-device.d.ts.map +1 -1
  151. package/definitions/models/user-registration.d.ts.map +1 -1
  152. package/definitions/models/user.d.ts.map +1 -1
  153. package/definitions/models/validation-report.d.ts.map +1 -1
  154. package/definitions/test/mock.d.ts.map +1 -1
  155. package/definitions/types/department.d.ts +14 -0
  156. package/definitions/types/department.d.ts.map +1 -1
  157. package/package.json +6 -5
  158. package/src/helpers.ts +4 -0
  159. package/src/index.ts +2 -1
  160. package/src/models/action-log.ts +8 -0
  161. package/src/models/agency.ts +41 -0
  162. package/src/models/arcgis-group.ts +10 -1
  163. package/src/models/assignment.ts +24 -4
  164. package/src/models/battalion.ts +42 -16
  165. package/src/models/beacon-log.ts +6 -1
  166. package/src/models/cad-incident-block.ts +8 -1
  167. package/src/models/cad-incident-stream.ts +31 -1
  168. package/src/models/cad-incident.ts +111 -1
  169. package/src/models/cad-simulation.ts +0 -2
  170. package/src/models/cad-status-map.ts +6 -1
  171. package/src/models/cad-status.ts +13 -2
  172. package/src/models/cad-vehicle-status-history.ts +47 -2
  173. package/src/models/cad-vehicle-status.ts +51 -3
  174. package/src/models/cad-vehicle.ts +35 -2
  175. package/src/models/chart-device-stats.ts +8 -1
  176. package/src/models/chart-incident.ts +14 -1
  177. package/src/models/chart-managed-incident.ts +22 -1
  178. package/src/models/chart-user.ts +14 -1
  179. package/src/models/checklist-item.ts +0 -1
  180. package/src/models/checklist.ts +28 -4
  181. package/src/models/csv-import.ts +7 -0
  182. package/src/models/department.ts +141 -8
  183. package/src/models/device-mapping.ts +19 -0
  184. package/src/models/esri.ts +7 -0
  185. package/src/models/incident-event.ts +45 -6
  186. package/src/models/incident-notified.ts +23 -1
  187. package/src/models/incident-takeover.ts +7 -1
  188. package/src/models/location.ts +133 -8
  189. package/src/models/mail-log.ts +6 -0
  190. package/src/models/managed-incident.ts +75 -4
  191. package/src/models/mark43-incident-retry.ts +0 -1
  192. package/src/models/message.ts +22 -1
  193. package/src/models/monitor.ts +17 -1
  194. package/src/models/personnel-import.ts +84 -0
  195. package/src/models/personnel-known.ts +9 -0
  196. package/src/models/rate-limit.ts +7 -0
  197. package/src/models/remote-log-stream.ts +0 -1
  198. package/src/models/remote-log.ts +0 -1
  199. package/src/models/schema/agency-saml.ts +1 -1
  200. package/src/models/schema/cad-incident.ts +0 -1
  201. package/src/models/session.ts +49 -6
  202. package/src/models/template.ts +17 -7
  203. package/src/models/user-device.ts +20 -0
  204. package/src/models/user-registration.ts +6 -1
  205. package/src/models/user.ts +65 -7
  206. package/src/models/validation-report.ts +7 -1
  207. package/src/test/location.ts +2 -2
  208. package/src/test/mock.ts +7 -2
  209. package/src/types/department.ts +17 -1
  210. package/test.sh +1 -1
@@ -19,7 +19,6 @@ export default async function IncidentTakeoverModule(mongoose: MongooseModule) {
19
19
  type: String,
20
20
  default: "",
21
21
  required: true,
22
- index: true,
23
22
  },
24
23
  uuid: {
25
24
  type: String,
@@ -74,6 +73,13 @@ export default async function IncidentTakeoverModule(mongoose: MongooseModule) {
74
73
  autoIndex: false,
75
74
  });
76
75
 
76
+ modelSchema.index({
77
+ departmentId: 1,
78
+ incident_id: 1
79
+ }, {
80
+ name: "departmentId_1_incident_id_1",
81
+ });
82
+
77
83
  return mongoose.model<IncidentTakeover>("IncidentTakeover", modelSchema, "massive_incident_takeover", { overwriteModels: true });
78
84
  }
79
85
 
@@ -20,7 +20,6 @@ export default async function LocationModule(mongoose: MongooseModule) {
20
20
  const Color = ColorModule(mongoose);
21
21
  const GeoJSONPoint = GeoJSONPointModule(mongoose);
22
22
 
23
-
24
23
  const modelSchema = new Schema<LocationType>({
25
24
  _id: {
26
25
  type: Schema.Types.ObjectId,
@@ -30,7 +29,6 @@ export default async function LocationModule(mongoose: MongooseModule) {
30
29
  type: String,
31
30
  default: "",
32
31
  required: true,
33
- index: true,
34
32
  },
35
33
  userId: {
36
34
  type: String,
@@ -183,11 +181,10 @@ export default async function LocationModule(mongoose: MongooseModule) {
183
181
  },
184
182
  }, {
185
183
  autoIndex: false,
186
- });
187
-
188
- modelSchema.set("toJSON", {
189
- virtuals: true,
190
- versionKey: false,
184
+ toJSON: {
185
+ virtuals: true,
186
+ versionKey: false,
187
+ }
191
188
  });
192
189
 
193
190
  modelSchema.virtual("id").get(function(this: MongooseDocument) {
@@ -212,12 +209,140 @@ export default async function LocationModule(mongoose: MongooseModule) {
212
209
  return location;
213
210
  });
214
211
 
212
+ modelSchema.index({
213
+ active: 1,
214
+ shared: 1,
215
+ departmentId: 1,
216
+ movedAt: 1
217
+ }, {
218
+ name: "active_1_shared_1_departmentId_1_movedAt_1",
219
+ });
220
+
221
+ modelSchema.index({
222
+ departmentId: 1,
223
+ active: 1,
224
+ movedAt: 1
225
+ }, {
226
+ name: "departmentId_1_active_1_movedAt_1",
227
+ });
228
+
229
+ modelSchema.index({
230
+ departmentId: 1,
231
+ agencyCode: 1,
232
+ agencyName: 1,
233
+ modified: 1
234
+ }, {
235
+ name: "departmentId_1_agencyCode_1_agencyName_1_modified_1",
236
+ });
237
+
238
+ modelSchema.index({
239
+ departmentId: 1,
240
+ modified: 1,
241
+ }, {
242
+ name: "departmentId_1_modified_1",
243
+ });
244
+
245
+ modelSchema.index({
246
+ departmentId: 1,
247
+ modified: 1,
248
+ movedAt: 1,
249
+ }, {
250
+ name: "departmentId_1_modified_1_movedAt_1",
251
+ });
252
+
253
+ modelSchema.index({
254
+ departmentId: 1,
255
+ opAreaCode: 1
256
+ }, {
257
+ name: "departmentId_1_opAreaCode_1",
258
+ });
259
+
260
+ modelSchema.index({
261
+ departmentId: 1,
262
+ opAreaName: 1
263
+ }, {
264
+ name: "departmentId_1_opAreaName_1",
265
+ });
266
+
267
+ modelSchema.index({
268
+ departmentId: 1,
269
+ session: 1,
270
+ device_type: 1
271
+ }, {
272
+ name: "departmentId_1_session_1_deviceType_1_unique",
273
+ unique: true,
274
+ });
275
+
276
+ modelSchema.index({
277
+ departmentId: 1,
278
+ shared: 1
279
+ }, {
280
+ name: "departmentId_1_shared_1",
281
+ });
282
+
283
+ modelSchema.index({
284
+ departmentId: 1,
285
+ state: 1
286
+ }, {
287
+ name: "departmentId_1_state_1",
288
+ });
289
+
290
+ modelSchema.index({
291
+ departmentId: 1,
292
+ username: 1
293
+ }, {
294
+ name: "departmentId_1_username_1",
295
+ });
296
+
297
+ modelSchema.index({
298
+ departmentId: 1,
299
+ device_type: 1,
300
+ userId: 1,
301
+ active: 1
302
+ }, {
303
+ name: "departmentId_deviceType_userId_active",
304
+ });
305
+
306
+ modelSchema.index({
307
+ esriId: 1,
308
+ modified: 1
309
+ }, {
310
+ name: "esriId_1_modified_1",
311
+ });
312
+
313
+ modelSchema.index({
314
+ session: 1,
315
+ userId: 1
316
+ }, {
317
+ name: "session_1_userId_1",
318
+ });
319
+
215
320
  // Create GeoJSON index
216
321
  modelSchema.index({
322
+ // This seems to need to be the first position, otherwise the query plan selects the wrong index (?)
217
323
  locationGeoJSON: "2dsphere",
218
324
  shared: 1,
219
- departmentId: 1,
220
325
  modified: 1,
326
+ movedAt: 1,
327
+ // departmentId: 1,
328
+ }, {
329
+ name: "shared_1_modified_1_movedAt_1_locationGeoJSON_2dsphere",
330
+ "2dsphereIndexVersion": 3
331
+ });
332
+
333
+ // Expire data after 45d
334
+ modelSchema.index({
335
+ movedAt: -1,
336
+ }, {
337
+ name: "ttl_45d_movedAt_-1",
338
+ expireAfterSeconds: 3888000,
339
+ });
340
+
341
+ modelSchema.index({
342
+ uuid: 1,
343
+ }, {
344
+ name: "uuid_1_unique",
345
+ unique: true,
221
346
  });
222
347
 
223
348
  modelSchema.plugin(mongooseLeanVirtuals);
@@ -79,6 +79,12 @@ export default async function MailLogModule(mongoose: MongooseModule) {
79
79
  autoIndex: false,
80
80
  });
81
81
 
82
+ modelSchema.index({
83
+ modified_unix_date: 1,
84
+ }, {
85
+ name: "modified_unix_date_1",
86
+ });
87
+
82
88
  return mongoose.model<MailLog>("MailLog", modelSchema, "massive_mail_log", { overwriteModels: true });
83
89
  }
84
90
 
@@ -397,7 +397,6 @@ export default async function ManagedIncidentModule(mongoose: MongooseModule) {
397
397
  type: String,
398
398
  default: "",
399
399
  required: true,
400
- index: true,
401
400
  },
402
401
  userId: {
403
402
  type: String,
@@ -562,17 +561,89 @@ export default async function ManagedIncidentModule(mongoose: MongooseModule) {
562
561
  },
563
562
  }, {
564
563
  autoIndex: false,
564
+ toJSON: {
565
+ virtuals: true,
566
+ versionKey: false,
567
+ },
565
568
  });
566
569
 
567
570
  modelSchema.virtual("id").get(function(this: ManagedIncident) {
568
571
  return this._id.toHexString();
569
572
  });
570
573
 
571
- modelSchema.set("toJSON", {
572
- virtuals: true,
573
- versionKey: false,
574
+ modelSchema.index({
575
+ departmentId: 1,
576
+ api_incident_number: 1
577
+ }, {
578
+ name: "departmentId_1_api_incident_number_1",
579
+ });
580
+
581
+ modelSchema.index({
582
+ departmentId: 1,
583
+ end_unix_time: 1,
584
+ }, {
585
+ name: "departmentId_1_end_unix_time_1",
586
+ });
587
+
588
+ modelSchema.index({
589
+ departmentId: 1,
590
+ end_unix_time: 1,
591
+ start_unix_time: -1,
592
+ }, {
593
+ name: "departmentId_1_end_unix_time_1_start_unix_time_-1",
594
+ });
595
+
596
+ modelSchema.index({
597
+ departmentId: 1,
598
+ extended: 1
599
+ }, {
600
+ name: "departmentId_1_extended_1",
601
+ });
602
+
603
+ modelSchema.index({
604
+ departmentId: 1,
605
+ is_closed: 1,
606
+ modified_unix_date: -1,
607
+ }, {
608
+ name: "departmentId_1_is_closed_1_modified_unix_date_-1",
609
+ });
610
+
611
+ modelSchema.index({
612
+ departmentId: 1,
613
+ modified_date: 1,
614
+ }, {
615
+ name: "departmentId_1_modified_date_1",
616
+ });
617
+
618
+ modelSchema.index({
619
+ departmentId: 1,
620
+ modified_unix_date: 1
621
+ }, {
622
+ name: "departmentId_1_modified_unix_date_1",
623
+ });
624
+
625
+ modelSchema.index({
626
+ departmentId: 1,
627
+ userId: 1,
628
+ start_unix_time: -1,
629
+ }, {
630
+ name: "departmentId_1_userId_1_start_unix_time_-1",
574
631
  });
575
632
 
633
+ modelSchema.index({
634
+ departmentId: 1,
635
+ start_unix_time: -1,
636
+ end_unix_time: 1
637
+ }, {
638
+ name: "departmentId_1_start_unix_time_-1_end_unix_time_1",
639
+ });
640
+
641
+ modelSchema.index({
642
+ uuid: 1,
643
+ }, {
644
+ name: "uuid_1",
645
+ unique: true,
646
+ });
576
647
 
577
648
  modelSchema.plugin(mongooseLeanVirtuals);
578
649
  return mongoose.model<ManagedIncident>("ManagedIncident", modelSchema, "massive_incident_managed", { overwriteModels: true });
@@ -46,7 +46,6 @@ export default async function Mark43IncidentRetryModule(mongoose: MongooseModule
46
46
  type: String,
47
47
  default: "",
48
48
  required: true,
49
- index: true,
50
49
  },
51
50
  created: {
52
51
  type: Date,
@@ -36,7 +36,6 @@ export default async function MessageModule(mongoose: MongooseModule) {
36
36
  type: String,
37
37
  default: "",
38
38
  required: true,
39
- index: true,
40
39
  },
41
40
  userId: {
42
41
  type: String,
@@ -98,6 +97,28 @@ export default async function MessageModule(mongoose: MongooseModule) {
98
97
  autoIndex: false,
99
98
  });
100
99
 
100
+ modelSchema.index({
101
+ departmentId: 1,
102
+ userId: 1,
103
+ createdAt: 1
104
+ }, {
105
+ name: "departmentId_1_userId_1_createdAt_1",
106
+ });
107
+
108
+ modelSchema.index({
109
+ "type.type": 1,
110
+ created: 1
111
+ }, {
112
+ name: "type_type_created_1",
113
+ });
114
+
115
+ modelSchema.index({
116
+ uuid: 1,
117
+ }, {
118
+ name: "uuid_1_unique",
119
+ unique: true,
120
+ });
121
+
101
122
  return mongoose.model<Message>("Message", modelSchema, "massive_message", { overwriteModels: true });
102
123
  }
103
124
 
@@ -20,7 +20,6 @@ export default async function MonitorModule(mongoose: MongooseModule) {
20
20
  type: String,
21
21
  default: "",
22
22
  required: true,
23
- index: true,
24
23
  },
25
24
  agencyId: {
26
25
  type: String,
@@ -61,6 +60,23 @@ export default async function MonitorModule(mongoose: MongooseModule) {
61
60
  }
62
61
  });
63
62
 
63
+ // cspell: words deparmtent
64
+ modelSchema.index({
65
+ departmentId: 1,
66
+ notificationType: 1,
67
+ sentAt: -1,
68
+ }, {
69
+ name: "deparmtentId_1_notificationType_1_sentAt_-1",
70
+ });
71
+
72
+ modelSchema.index({
73
+ departmentId: 1,
74
+ notificationType: 1,
75
+ sentUnixDate: -1,
76
+ }, {
77
+ name: "deparmtentId_1_notificationType_1_sentUnixDate_-1",
78
+ });
79
+
64
80
  return mongoose.model<Monitor>("Monitor", modelSchema, "massive_monitor", { overwriteModels: true });
65
81
  }
66
82
 
@@ -114,6 +114,90 @@ export function PersonnelImportSchema(mongoose: MongooseModule) {
114
114
  autoIndex: false,
115
115
  });
116
116
 
117
+ modelSchema.index({
118
+ agencyId: 1,
119
+ modified: -1
120
+ }, {
121
+ name: "agencyId_1_modified_-1",
122
+ });
123
+
124
+ modelSchema.index({
125
+ departmentId: 1,
126
+ active: 1
127
+ }, {
128
+ name: "departmentId_1_active_1",
129
+ });
130
+
131
+ modelSchema.index({
132
+ departmentId: 1,
133
+ active: 1,
134
+ radioNames: 1
135
+ }, {
136
+ name: "departmentId_1_active_1_radioNames_1",
137
+ });
138
+
139
+ modelSchema.index({
140
+ departmentId: 1,
141
+ agencyId: 1,
142
+ active: 1,
143
+ shiftStartTime: 1,
144
+ shiftEndTime: 1
145
+ }, {
146
+ name: "departmentId_1_agencyId_1_active_1_shiftStartTime_1_shiftEndTime_1",
147
+ });
148
+
149
+ modelSchema.index({
150
+ departmentId: 1,
151
+ modified: 1,
152
+ shiftEndTime: 1
153
+ }, {
154
+ name: "departmentId_1_modified_1_shiftEndTime_1",
155
+ });
156
+
157
+ modelSchema.index({
158
+ departmentId: 1,
159
+ radioNames: 1,
160
+ active: 1,
161
+ shiftEndTime: 1,
162
+ shiftStartTime: 1
163
+ }, {
164
+ name: "departmentId_1_radioNames_1_active_1_shiftEndTime_1_shiftStartTime_1",
165
+ });
166
+
167
+ modelSchema.index({
168
+ departmentId: 1,
169
+ "radios.radioName": 1,
170
+ active: 1,
171
+ "radios.active": 1,
172
+ shiftEndTime: 1,
173
+ shiftStartTime: 1
174
+ }, {
175
+ name: "departmentId_1_radios.radioName_1_active_1_radios.active_1_shiftEndTime_1_shiftStartTime_1",
176
+ });
177
+
178
+ modelSchema.index({
179
+ departmentId: 1,
180
+ shiftStartTime: 1,
181
+ PersonnelID: 1
182
+ }, {
183
+ name: "departmentId_1_shiftStartTime_1_PersonnelID_1",
184
+ unique: true,
185
+ });
186
+
187
+ modelSchema.index({
188
+ radios: 1,
189
+ modified: 1
190
+ }, {
191
+ name: "radios_1_modified_1",
192
+ });
193
+
194
+ modelSchema.index({
195
+ modified: 1,
196
+ }, {
197
+ name: "ttl_90d_modified_1",
198
+ expireAfterSeconds: 7786800,
199
+ });
200
+
117
201
  return modelSchema;
118
202
  }
119
203
 
@@ -86,6 +86,15 @@ export function PersonnelKnownSchema(mongoose: MongooseModule) {
86
86
  autoIndex: false,
87
87
  });
88
88
 
89
+ modelSchema.index({
90
+ departmentId: 1,
91
+ PersonnelID: 1,
92
+ active: 1
93
+ }, {
94
+ name: "departmentId_1_PersonnelID_1_active_1",
95
+ unique: true,
96
+ });
97
+
89
98
  return modelSchema;
90
99
  }
91
100
 
@@ -36,6 +36,13 @@ export default async function RateLimitModule(mongoose: MongooseModule) {
36
36
  autoIndex: false,
37
37
  });
38
38
 
39
+ modelSchema.index({
40
+ username: 1,
41
+ modified_unix_date: 1
42
+ }, {
43
+ name: "username_1_modified_unix_date_1",
44
+ });
45
+
39
46
  return mongoose.model<RateLimit>("RateLimit", modelSchema, "massive_rate_limit", { overwriteModels: true });
40
47
  }
41
48
 
@@ -23,7 +23,6 @@ export default async function RemoteLogStreamModule(mongoose: MongooseModule) {
23
23
  type: String,
24
24
  default: "",
25
25
  required: true,
26
- index: true,
27
26
  },
28
27
  userId: {
29
28
  type: String,
@@ -23,7 +23,6 @@ export default async function RemoteLogModule(mongoose: MongooseModule) {
23
23
  type: String,
24
24
  default: "",
25
25
  required: true,
26
- index: true,
27
26
  },
28
27
  userId: {
29
28
  type: String,
@@ -10,7 +10,7 @@ export default function AgencySAMLSchema(mongoose: MongooseModule) {
10
10
  selector: {
11
11
  type: String,
12
12
  required: true,
13
- unique: true,
13
+ // Index set at schema level, to be able to specify name and/or other options
14
14
  },
15
15
  idp: {
16
16
  type: String,
@@ -235,7 +235,6 @@ export function CADIncidentSchema(mongoose: MongooseModule) {
235
235
  type: String,
236
236
  default: "",
237
237
  required: true,
238
- index: true,
239
238
  },
240
239
  AgencyID: {
241
240
  type: String,
@@ -45,7 +45,6 @@ export default async function SessionModule(mongoose: MongooseModule) {
45
45
  validator: requiredButAllowEmptyString,
46
46
  message: "departmentId is required",
47
47
  },
48
- index: true,
49
48
  },
50
49
  why: {
51
50
  type: String,
@@ -76,21 +75,65 @@ export default async function SessionModule(mongoose: MongooseModule) {
76
75
  },
77
76
  }, {
78
77
  autoIndex: false,
78
+ toJSON: {
79
+ virtuals: true,
80
+ versionKey: false,
81
+ }
79
82
  });
80
83
 
81
84
  modelSchema.pre("save", function(next) {
82
85
  this._id = this.get("token"); // Copy _id from token
83
86
  next();
84
87
  });
85
- modelSchema.virtual("id").get(function(this: Session) {
86
- return this._id.toString();
88
+
89
+ modelSchema.index({
90
+ departmentId: 1,
91
+ when: -1
92
+ }, {
93
+ name: "departmentId_1_when_-1",
94
+ });
95
+
96
+ // TODO: Review if this should be unique
97
+ modelSchema.index({
98
+ nick: 1,
99
+ }, {
100
+ name: "nick_1",
101
+ // unique: true,
87
102
  });
88
103
 
89
- modelSchema.set("toJSON", {
90
- virtuals: true,
91
- versionKey: false,
104
+ modelSchema.index({
105
+ token: 1,
106
+ active: 1
107
+ }, {
108
+ name: "token_1_active_1",
109
+ });
110
+
111
+ modelSchema.index({
112
+ token: 1,
113
+ }, {
114
+ name: "token_1_unique",
115
+ unique: true,
92
116
  });
93
117
 
118
+ modelSchema.index({
119
+ user: 1,
120
+ active: 1
121
+ }, {
122
+ name: "user_1_active_1",
123
+ });
124
+
125
+ modelSchema.index({
126
+ user: 1,
127
+ when: 1
128
+ }, {
129
+ name: "user_1_when_1",
130
+ });
131
+
132
+ modelSchema.index({
133
+ when: 1,
134
+ }, {
135
+ name: "when_1",
136
+ });
94
137
 
95
138
  return mongoose.model<Session>("Session", modelSchema, "sys_login", { overwriteModels: true });
96
139
  }
@@ -78,7 +78,6 @@ export function TemplateSchema(mongoose: MongooseModule) {
78
78
  departmentId: {
79
79
  type: String,
80
80
  required: true,
81
- index: true,
82
81
  },
83
82
  active: {
84
83
  type: Boolean,
@@ -103,19 +102,30 @@ export function TemplateSchema(mongoose: MongooseModule) {
103
102
  },
104
103
  }, {
105
104
  autoIndex: false,
105
+ toJSON: {
106
+ virtuals: true,
107
+ versionKey: false,
108
+ transform(doc, ret) {
109
+ strictSchema(doc.schema as typeof modelSchema, ret);
110
+ },
111
+ }
106
112
  });
107
113
  modelSchema.virtual("id").get(function(this: Template) {
108
114
  return this._id.toHexString();
109
115
  });
110
116
 
111
- modelSchema.set("toJSON", {
112
- virtuals: true,
113
- versionKey: false,
114
- transform(doc, ret) {
115
- strictSchema(doc.schema as typeof modelSchema, ret);
116
- },
117
+ modelSchema.index({
118
+ departmentId: 1,
119
+ }, {
120
+ name: "departmentId_1",
117
121
  });
118
122
 
123
+ modelSchema.index({
124
+ uuid: 1,
125
+ }, {
126
+ name: "uuid_1_unique",
127
+ unique: true,
128
+ });
119
129
 
120
130
  function strictSchema(schema: typeof modelSchema, ret: Record<string, unknown>) {
121
131
  Object.keys(ret).forEach(function(element) {
@@ -198,6 +198,26 @@ export default async function UserDeviceModule(mongoose: MongooseModule) {
198
198
  autoIndex: false,
199
199
  });
200
200
 
201
+ modelSchema.index({
202
+ departmentId: 1,
203
+ userId: 1,
204
+ }, {
205
+ name: "departmentId_1_userId_1",
206
+ });
207
+
208
+ modelSchema.index({
209
+ "devices.token": 1,
210
+ }, {
211
+ name: "devices_token_1",
212
+ });
213
+
214
+ modelSchema.index({
215
+ userId: 1,
216
+ }, {
217
+ name: "userId_1_unique",
218
+ unique: true,
219
+ });
220
+
201
221
  return mongoose.model<UserDevice>("UserDevice", modelSchema, "massive_user_device", { overwriteModels: true });
202
222
  }
203
223