@oneuptime/common 7.0.3827 → 7.0.3840

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 (74) hide show
  1. package/Models/DatabaseModels/GlobalConfig.ts +22 -4
  2. package/Models/DatabaseModels/Index.ts +2 -0
  3. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.ts +48 -0
  4. package/Models/DatabaseModels/OnCallDutyPolicyUserOverride.ts +502 -0
  5. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +35 -4
  6. package/Models/DatabaseModels/UserOnCallLog.ts +43 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1741904597606-MigrationName.ts +69 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1741908200702-MigrationName.ts +29 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/1741955609393-MigrationName.ts +35 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1741955752685-MigrationName.ts +23 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1741957080431-MigrationName.ts +23 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1741959216297-MigrationName.ts +23 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  14. package/Server/Services/CallService.ts +4 -1
  15. package/Server/Services/Index.ts +2 -0
  16. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +90 -3
  17. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +17 -1
  18. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +77 -0
  19. package/Server/Services/ProjectCallSMSConfigService.ts +12 -2
  20. package/Server/Services/SmsService.ts +4 -1
  21. package/Server/Services/StatusPageSubscriberService.ts +4 -2
  22. package/Server/Services/UserNotificationRuleService.ts +5 -0
  23. package/Types/CallAndSMS/TwilioConfig.ts +2 -1
  24. package/Types/Permission.ts +38 -0
  25. package/Types/Phone.ts +61 -1
  26. package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -5
  27. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  28. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  29. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  30. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js +49 -0
  31. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js.map +1 -1
  32. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js +516 -0
  33. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js.map +1 -0
  34. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +38 -5
  35. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  36. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +44 -0
  37. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  38. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741904597606-MigrationName.js +30 -0
  39. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741904597606-MigrationName.js.map +1 -0
  40. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741908200702-MigrationName.js +16 -0
  41. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741908200702-MigrationName.js.map +1 -0
  42. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955609393-MigrationName.js +18 -0
  43. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955609393-MigrationName.js.map +1 -0
  44. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955752685-MigrationName.js +14 -0
  45. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955752685-MigrationName.js.map +1 -0
  46. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741957080431-MigrationName.js +14 -0
  47. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741957080431-MigrationName.js.map +1 -0
  48. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741959216297-MigrationName.js +14 -0
  49. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741959216297-MigrationName.js.map +1 -0
  50. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  51. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  52. package/build/dist/Server/Services/CallService.js +3 -2
  53. package/build/dist/Server/Services/CallService.js.map +1 -1
  54. package/build/dist/Server/Services/Index.js +2 -0
  55. package/build/dist/Server/Services/Index.js.map +1 -1
  56. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +59 -3
  57. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  58. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +14 -1
  59. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  60. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +49 -0
  61. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -0
  62. package/build/dist/Server/Services/ProjectCallSMSConfigService.js +11 -2
  63. package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
  64. package/build/dist/Server/Services/SmsService.js +3 -2
  65. package/build/dist/Server/Services/SmsService.js.map +1 -1
  66. package/build/dist/Server/Services/StatusPageSubscriberService.js +4 -2
  67. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  68. package/build/dist/Server/Services/UserNotificationRuleService.js +3 -0
  69. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  70. package/build/dist/Types/Permission.js +32 -0
  71. package/build/dist/Types/Permission.js.map +1 -1
  72. package/build/dist/Types/Phone.js +32 -0
  73. package/build/dist/Types/Phone.js.map +1 -1
  74. package/package.json +2 -2
@@ -232,17 +232,35 @@ export default class GlobalConfig extends GlobalConfigModel {
232
232
  })
233
233
  @TableColumn({
234
234
  type: TableColumnType.Phone,
235
- title: "Twilio Phone Number",
236
- description: "Phone Number for your Twilio account",
235
+ title: "Twilio Primary Phone Number",
236
+ description: "Secondary Phone Number for your Twilio account",
237
237
  })
238
238
  @Column({
239
239
  type: ColumnType.Phone,
240
240
  length: ColumnLength.Phone,
241
241
  nullable: true,
242
- unique: true,
242
+ unique: false,
243
243
  transformer: Phone.getDatabaseTransformer(),
244
244
  })
245
- public twilioPhoneNumber?: Phone = undefined;
245
+ public twilioPrimaryPhoneNumber?: Phone = undefined;
246
+
247
+ @ColumnAccessControl({
248
+ create: [],
249
+ read: [],
250
+ update: [],
251
+ })
252
+ @TableColumn({
253
+ type: TableColumnType.LongText,
254
+ title: "Twilio Secondary Phone Numbers",
255
+ description: "Secondary Phone Number for your Twilio account",
256
+ })
257
+ @Column({
258
+ type: ColumnType.LongText,
259
+ length: ColumnLength.LongText,
260
+ nullable: true,
261
+ unique: false,
262
+ })
263
+ public twilioSecondaryPhoneNumbers?: string = undefined; // phone numbers seperated by comma
246
264
 
247
265
  @ColumnAccessControl({
248
266
  create: [],
@@ -166,6 +166,7 @@ import WorkspaceProjectAuthToken from "./WorkspaceProjectAuthToken";
166
166
  import WorkspaceSetting from "./WorkspaceSetting";
167
167
  import WorkspaceNotificationRule from "./WorkspaceNotificationRule";
168
168
  import ProjectUser from "./ProjectUser";
169
+ import OnCallDutyPolicyUserOverride from "./OnCallDutyPolicyUserOverride";
169
170
 
170
171
  const AllModelTypes: Array<{
171
172
  new (): BaseModel;
@@ -192,6 +193,7 @@ const AllModelTypes: Array<{
192
193
  OnCallDutyPolicyEscalationRuleUser,
193
194
  OnCallDutyPolicyExecutionLog,
194
195
  OnCallDutyPolicyExecutionLogTimeline,
196
+ OnCallDutyPolicyUserOverride,
195
197
 
196
198
  Monitor,
197
199
  MonitorSecret,
@@ -780,4 +780,52 @@ export default class OnCallDutyPolicyExecutionLogTimeline extends BaseModel {
780
780
  transformer: ObjectID.getDatabaseTransformer(),
781
781
  })
782
782
  public deletedByUserId?: ObjectID = undefined;
783
+
784
+ @ColumnAccessControl({
785
+ create: [],
786
+ read: [
787
+ Permission.ProjectOwner,
788
+ Permission.ProjectAdmin,
789
+ Permission.ProjectMember,
790
+ Permission.ReadProjectOnCallDutyPolicyExecutionLogTimeline,
791
+ ],
792
+ update: [],
793
+ })
794
+ @TableColumn({
795
+ manyToOneRelationColumn: "overridedByUserId",
796
+ type: TableColumnType.Entity,
797
+ modelType: User,
798
+ title: "Overridden by User",
799
+ description: "Relation to User who overrode this alert",
800
+ })
801
+ @ManyToOne(
802
+ () => {
803
+ return User;
804
+ },
805
+ {
806
+ eager: false,
807
+ nullable: true,
808
+ onDelete: "CASCADE",
809
+ orphanedRowAction: "nullify",
810
+ },
811
+ )
812
+ @JoinColumn({ name: "overridedByUserId" })
813
+ public overridedByUser?: User = undefined;
814
+
815
+ @ColumnAccessControl({
816
+ create: [],
817
+ read: [Permission.CurrentUser],
818
+ update: [],
819
+ })
820
+ @TableColumn({
821
+ type: TableColumnType.ObjectID,
822
+ title: "Overridden by User ID",
823
+ description: "User ID who overrode this alert",
824
+ })
825
+ @Column({
826
+ type: ColumnType.ObjectID,
827
+ nullable: true,
828
+ transformer: ObjectID.getDatabaseTransformer(),
829
+ })
830
+ public overridedByUserId?: ObjectID = undefined;
783
831
  }
@@ -0,0 +1,502 @@
1
+ import OnCallDutyPolicy from "./OnCallDutyPolicy";
2
+ import Project from "./Project";
3
+ import User from "./User";
4
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
5
+ import Route from "../../Types/API/Route";
6
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
7
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
8
+ import ColumnType from "../../Types/Database/ColumnType";
9
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
10
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
11
+ import TableColumn from "../../Types/Database/TableColumn";
12
+ import TableColumnType from "../../Types/Database/TableColumnType";
13
+ import TableMetadata from "../../Types/Database/TableMetadata";
14
+ import TenantColumn from "../../Types/Database/TenantColumn";
15
+ import IconProp from "../../Types/Icon/IconProp";
16
+ import ObjectID from "../../Types/ObjectID";
17
+ import Permission from "../../Types/Permission";
18
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
19
+ import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
20
+ import { PlanType } from "../../Types/Billing/SubscriptionPlan";
21
+
22
+ @EnableDocumentation()
23
+ @TableBillingAccessControl({
24
+ create: PlanType.Growth,
25
+ read: PlanType.Growth,
26
+ update: PlanType.Growth,
27
+ delete: PlanType.Growth,
28
+ })
29
+ @TenantColumn("projectId")
30
+ @TableAccessControl({
31
+ create: [
32
+ Permission.ProjectOwner,
33
+ Permission.ProjectAdmin,
34
+ Permission.ProjectMember,
35
+ Permission.CreateOnCallDutyPolicyUserOverride,
36
+ ],
37
+ read: [
38
+ Permission.ProjectOwner,
39
+ Permission.ProjectAdmin,
40
+ Permission.ProjectMember,
41
+ Permission.ReadOnCallDutyPolicyUserOverride,
42
+ ],
43
+ delete: [
44
+ Permission.ProjectOwner,
45
+ Permission.ProjectAdmin,
46
+ Permission.ProjectMember,
47
+ Permission.DeleteOnCallDutyPolicyUserOverride,
48
+ ],
49
+ update: [
50
+ Permission.ProjectOwner,
51
+ Permission.ProjectAdmin,
52
+ Permission.ProjectMember,
53
+ Permission.EditOnCallDutyPolicyUserOverride,
54
+ ],
55
+ })
56
+ @CrudApiEndpoint(new Route("/on-call-duty-policy-user-override"))
57
+ @Entity({
58
+ name: "OnCallDutyPolicyUserOverride",
59
+ })
60
+ @TableMetadata({
61
+ tableName: "OnCallDutyPolicyUserOverride",
62
+ singularName: "User Override",
63
+ pluralName: "User Overrides",
64
+ icon: IconProp.Call,
65
+ tableDescription:
66
+ "Manage on-call duty user overrides, for example if the user is on leave you can override the on-call duty policy for that user so all the alerts will be routed to the other user.",
67
+ })
68
+ export default class OnCallDutyPolicyUserOverride extends BaseModel {
69
+ @ColumnAccessControl({
70
+ create: [
71
+ Permission.ProjectOwner,
72
+ Permission.ProjectAdmin,
73
+ Permission.ProjectMember,
74
+ Permission.CreateOnCallDutyPolicyUserOverride,
75
+ ],
76
+ read: [
77
+ Permission.ProjectOwner,
78
+ Permission.ProjectAdmin,
79
+ Permission.ProjectMember,
80
+ Permission.ReadOnCallDutyPolicyUserOverride,
81
+ ],
82
+ update: [],
83
+ })
84
+ @TableColumn({
85
+ manyToOneRelationColumn: "projectId",
86
+ type: TableColumnType.Entity,
87
+ modelType: Project,
88
+ title: "Project",
89
+ description: "Relation to Project Resource in which this object belongs",
90
+ })
91
+ @ManyToOne(
92
+ () => {
93
+ return Project;
94
+ },
95
+ {
96
+ eager: false,
97
+ nullable: true,
98
+ onDelete: "CASCADE",
99
+ orphanedRowAction: "nullify",
100
+ },
101
+ )
102
+ @JoinColumn({ name: "projectId" })
103
+ public project?: Project = undefined;
104
+
105
+ @ColumnAccessControl({
106
+ create: [
107
+ Permission.ProjectOwner,
108
+ Permission.ProjectAdmin,
109
+ Permission.ProjectMember,
110
+ Permission.CreateOnCallDutyPolicyUserOverride,
111
+ ],
112
+ read: [
113
+ Permission.ProjectOwner,
114
+ Permission.ProjectAdmin,
115
+ Permission.ProjectMember,
116
+ Permission.ReadOnCallDutyPolicyUserOverride,
117
+ ],
118
+ update: [],
119
+ })
120
+ @Index()
121
+ @TableColumn({
122
+ type: TableColumnType.ObjectID,
123
+ required: true,
124
+ canReadOnRelationQuery: true,
125
+ title: "Project ID",
126
+ description: "ID of your OneUptime Project in which this object belongs",
127
+ })
128
+ @Column({
129
+ type: ColumnType.ObjectID,
130
+ nullable: false,
131
+ transformer: ObjectID.getDatabaseTransformer(),
132
+ })
133
+ public projectId?: ObjectID = undefined;
134
+
135
+ // If this is null then it's a global override
136
+ // If this is set then it's a policy specific override
137
+ // Policy specifc override will take precedence over global override
138
+
139
+ @ColumnAccessControl({
140
+ create: [
141
+ Permission.ProjectOwner,
142
+ Permission.ProjectAdmin,
143
+ Permission.ProjectMember,
144
+ Permission.CreateOnCallDutyPolicyUserOverride,
145
+ ],
146
+ read: [
147
+ Permission.ProjectOwner,
148
+ Permission.ProjectAdmin,
149
+ Permission.ProjectMember,
150
+ Permission.ReadOnCallDutyPolicyUserOverride,
151
+ ],
152
+ update: [],
153
+ })
154
+ @TableColumn({
155
+ manyToOneRelationColumn: "onCallDutyPolicyId",
156
+ type: TableColumnType.Entity,
157
+ modelType: OnCallDutyPolicy,
158
+ title: "On-Call Policy",
159
+ description:
160
+ "Relation to On-Call Policy where this escalation rule belongs.",
161
+ })
162
+ @ManyToOne(
163
+ () => {
164
+ return OnCallDutyPolicy;
165
+ },
166
+ {
167
+ eager: false,
168
+ nullable: true,
169
+ onDelete: "CASCADE",
170
+ orphanedRowAction: "nullify",
171
+ },
172
+ )
173
+ @JoinColumn({ name: "onCallDutyPolicyId" })
174
+ public onCallDutyPolicy?: OnCallDutyPolicy = undefined;
175
+
176
+ @ColumnAccessControl({
177
+ create: [
178
+ Permission.ProjectOwner,
179
+ Permission.ProjectAdmin,
180
+ Permission.ProjectMember,
181
+ Permission.CreateOnCallDutyPolicyUserOverride,
182
+ ],
183
+ read: [
184
+ Permission.ProjectOwner,
185
+ Permission.ProjectAdmin,
186
+ Permission.ProjectMember,
187
+ Permission.ReadOnCallDutyPolicyUserOverride,
188
+ ],
189
+ update: [],
190
+ })
191
+ @Index()
192
+ @TableColumn({
193
+ type: TableColumnType.ObjectID,
194
+ required: false,
195
+ canReadOnRelationQuery: true,
196
+ title: "On-Call Policy ID",
197
+ description:
198
+ "ID of your On-Call Policy where this escalation rule belongs.",
199
+ })
200
+ @Column({
201
+ type: ColumnType.ObjectID,
202
+ nullable: true,
203
+ transformer: ObjectID.getDatabaseTransformer(),
204
+ })
205
+ public onCallDutyPolicyId?: ObjectID = undefined;
206
+
207
+ @ColumnAccessControl({
208
+ create: [
209
+ Permission.ProjectOwner,
210
+ Permission.ProjectAdmin,
211
+ Permission.ProjectMember,
212
+ Permission.CreateOnCallDutyPolicyUserOverride,
213
+ ],
214
+ read: [
215
+ Permission.ProjectOwner,
216
+ Permission.ProjectAdmin,
217
+ Permission.ProjectMember,
218
+ Permission.ReadOnCallDutyPolicyUserOverride,
219
+ ],
220
+ update: [],
221
+ })
222
+ @TableColumn({
223
+ manyToOneRelationColumn: "createdByUserId",
224
+ type: TableColumnType.Entity,
225
+ modelType: User,
226
+ title: "Created by User",
227
+ description:
228
+ "Relation to User who created this object (if this object was created by a User)",
229
+ })
230
+ @ManyToOne(
231
+ () => {
232
+ return User;
233
+ },
234
+ {
235
+ eager: false,
236
+ nullable: true,
237
+ onDelete: "SET NULL",
238
+ orphanedRowAction: "nullify",
239
+ },
240
+ )
241
+ @JoinColumn({ name: "createdByUserId" })
242
+ public createdByUser?: User = undefined;
243
+
244
+ @ColumnAccessControl({
245
+ create: [
246
+ Permission.ProjectOwner,
247
+ Permission.ProjectAdmin,
248
+ Permission.ProjectMember,
249
+ Permission.CreateOnCallDutyPolicyUserOverride,
250
+ ],
251
+ read: [
252
+ Permission.ProjectOwner,
253
+ Permission.ProjectAdmin,
254
+ Permission.ProjectMember,
255
+ Permission.ReadOnCallDutyPolicyUserOverride,
256
+ ],
257
+ update: [],
258
+ })
259
+ @TableColumn({
260
+ type: TableColumnType.ObjectID,
261
+ title: "Created by User ID",
262
+ description:
263
+ "User ID who created this object (if this object was created by a User)",
264
+ })
265
+ @Column({
266
+ type: ColumnType.ObjectID,
267
+ nullable: true,
268
+ transformer: ObjectID.getDatabaseTransformer(),
269
+ })
270
+ public createdByUserId?: ObjectID = undefined;
271
+
272
+ @ColumnAccessControl({
273
+ create: [
274
+ Permission.ProjectOwner,
275
+ Permission.ProjectAdmin,
276
+ Permission.ProjectMember,
277
+ Permission.CreateOnCallDutyPolicyUserOverride,
278
+ ],
279
+ read: [
280
+ Permission.ProjectOwner,
281
+ Permission.ProjectAdmin,
282
+ Permission.ProjectMember,
283
+ Permission.ReadOnCallDutyPolicyUserOverride,
284
+ ],
285
+ update: [],
286
+ })
287
+ @TableColumn({
288
+ manyToOneRelationColumn: "overrideUserId",
289
+ type: TableColumnType.Entity,
290
+ modelType: User,
291
+ title: "Override User",
292
+ description:
293
+ "Relation to User who is being overridden by this object (if this object was created by a User)",
294
+ })
295
+ @ManyToOne(
296
+ () => {
297
+ return User;
298
+ },
299
+ {
300
+ eager: false,
301
+ nullable: true,
302
+ onDelete: "SET NULL",
303
+ orphanedRowAction: "nullify",
304
+ },
305
+ )
306
+ @JoinColumn({ name: "overrideUserId" })
307
+ public overrideUser?: User = undefined;
308
+
309
+ @ColumnAccessControl({
310
+ create: [
311
+ Permission.ProjectOwner,
312
+ Permission.ProjectAdmin,
313
+ Permission.ProjectMember,
314
+ Permission.CreateOnCallDutyPolicyUserOverride,
315
+ ],
316
+ read: [
317
+ Permission.ProjectOwner,
318
+ Permission.ProjectAdmin,
319
+ Permission.ProjectMember,
320
+ Permission.ReadOnCallDutyPolicyUserOverride,
321
+ ],
322
+ update: [],
323
+ })
324
+ @TableColumn({
325
+ type: TableColumnType.ObjectID,
326
+ required: true,
327
+ title: "Override User ID",
328
+ description:
329
+ "User ID who is being overridden by this object (if this object was created by a User)",
330
+ })
331
+ @Column({
332
+ type: ColumnType.ObjectID,
333
+ nullable: false,
334
+ transformer: ObjectID.getDatabaseTransformer(),
335
+ })
336
+ public overrideUserId?: ObjectID = undefined;
337
+
338
+ @ColumnAccessControl({
339
+ create: [
340
+ Permission.ProjectOwner,
341
+ Permission.ProjectAdmin,
342
+ Permission.ProjectMember,
343
+ Permission.CreateOnCallDutyPolicyUserOverride,
344
+ ],
345
+ read: [
346
+ Permission.ProjectOwner,
347
+ Permission.ProjectAdmin,
348
+ Permission.ProjectMember,
349
+ Permission.ReadOnCallDutyPolicyUserOverride,
350
+ ],
351
+ update: [],
352
+ })
353
+ @TableColumn({
354
+ manyToOneRelationColumn: "routeAlertsToUserId",
355
+ type: TableColumnType.Entity,
356
+ modelType: User,
357
+ title: "Route Alerts To User",
358
+ description:
359
+ "Relation to User who is being overridden by this object (if this object was created by a User)",
360
+ })
361
+ @ManyToOne(
362
+ () => {
363
+ return User;
364
+ },
365
+ {
366
+ eager: false,
367
+ nullable: true,
368
+ onDelete: "SET NULL",
369
+ orphanedRowAction: "nullify",
370
+ },
371
+ )
372
+ @JoinColumn({ name: "routeAlertsToUserId" })
373
+ public routeAlertsToUser?: User = undefined;
374
+
375
+ @ColumnAccessControl({
376
+ create: [
377
+ Permission.ProjectOwner,
378
+ Permission.ProjectAdmin,
379
+ Permission.ProjectMember,
380
+ Permission.CreateOnCallDutyPolicyUserOverride,
381
+ ],
382
+ read: [
383
+ Permission.ProjectOwner,
384
+ Permission.ProjectAdmin,
385
+ Permission.ProjectMember,
386
+ Permission.ReadOnCallDutyPolicyUserOverride,
387
+ ],
388
+ update: [],
389
+ })
390
+ @TableColumn({
391
+ type: TableColumnType.ObjectID,
392
+ required: true,
393
+ title: "Route Alerts To User ID",
394
+ description:
395
+ "User ID who is being overridden by this object (if this object was created by a User)",
396
+ })
397
+ @Column({
398
+ type: ColumnType.ObjectID,
399
+ nullable: false,
400
+ transformer: ObjectID.getDatabaseTransformer(),
401
+ })
402
+ public routeAlertsToUserId?: ObjectID = undefined;
403
+
404
+ @TableColumn({
405
+ title: "Start At",
406
+ type: TableColumnType.Date,
407
+ required: true,
408
+ description: "When does this start?",
409
+ })
410
+ @ColumnAccessControl({
411
+ create: [
412
+ Permission.ProjectOwner,
413
+ Permission.ProjectAdmin,
414
+ Permission.ProjectMember,
415
+ Permission.CreateOnCallDutyPolicyUserOverride,
416
+ ],
417
+ read: [
418
+ Permission.ProjectOwner,
419
+ Permission.ProjectAdmin,
420
+ Permission.ProjectMember,
421
+ Permission.ReadOnCallDutyPolicyUserOverride,
422
+ ],
423
+ update: [],
424
+ })
425
+ @Column({
426
+ nullable: false,
427
+ type: ColumnType.Date,
428
+ })
429
+ public startsAt?: Date = undefined;
430
+
431
+ @TableColumn({
432
+ title: "Ends At",
433
+ type: TableColumnType.Date,
434
+ required: true,
435
+ description: "When does this end?",
436
+ })
437
+ @ColumnAccessControl({
438
+ create: [
439
+ Permission.ProjectOwner,
440
+ Permission.ProjectAdmin,
441
+ Permission.ProjectMember,
442
+ Permission.CreateOnCallDutyPolicyUserOverride,
443
+ ],
444
+ read: [
445
+ Permission.ProjectOwner,
446
+ Permission.ProjectAdmin,
447
+ Permission.ProjectMember,
448
+ Permission.ReadOnCallDutyPolicyUserOverride,
449
+ ],
450
+ update: [],
451
+ })
452
+ @Column({
453
+ nullable: false,
454
+ type: ColumnType.Date,
455
+ })
456
+ public endsAt?: Date = undefined;
457
+
458
+ @ColumnAccessControl({
459
+ create: [],
460
+ read: [],
461
+ update: [],
462
+ })
463
+ @TableColumn({
464
+ manyToOneRelationColumn: "deletedByUserId",
465
+ type: TableColumnType.Entity,
466
+ title: "Deleted by User",
467
+ description:
468
+ "Relation to User who deleted this object (if this object was deleted by a User)",
469
+ })
470
+ @ManyToOne(
471
+ () => {
472
+ return User;
473
+ },
474
+ {
475
+ cascade: false,
476
+ eager: false,
477
+ nullable: true,
478
+ onDelete: "SET NULL",
479
+ orphanedRowAction: "nullify",
480
+ },
481
+ )
482
+ @JoinColumn({ name: "deletedByUserId" })
483
+ public deletedByUser?: User = undefined;
484
+
485
+ @ColumnAccessControl({
486
+ create: [],
487
+ read: [],
488
+ update: [],
489
+ })
490
+ @TableColumn({
491
+ type: TableColumnType.ObjectID,
492
+ title: "Deleted by User ID",
493
+ description:
494
+ "User ID who deleted this object (if this object was deleted by a User)",
495
+ })
496
+ @Column({
497
+ type: ColumnType.ObjectID,
498
+ nullable: true,
499
+ transformer: ObjectID.getDatabaseTransformer(),
500
+ })
501
+ public deletedByUserId?: ObjectID = undefined;
502
+ }
@@ -416,15 +416,46 @@ export default class ProjectCallSMSConfig extends BaseModel {
416
416
  })
417
417
  @TableColumn({
418
418
  type: TableColumnType.Phone,
419
- title: "Twilio Phone Number",
420
- description: "Phone Number for your Twilio account",
419
+ title: "Twilio Primary Phone Number",
420
+ description: "Primary Phone Number for your Twilio account",
421
421
  })
422
422
  @Column({
423
423
  type: ColumnType.Phone,
424
424
  length: ColumnLength.Phone,
425
425
  nullable: true,
426
- unique: true,
426
+ unique: false,
427
427
  transformer: Phone.getDatabaseTransformer(),
428
428
  })
429
- public twilioPhoneNumber?: Phone = undefined;
429
+ public twilioPrimaryPhoneNumber?: Phone = undefined;
430
+
431
+ @ColumnAccessControl({
432
+ create: [
433
+ Permission.ProjectOwner,
434
+ Permission.ProjectAdmin,
435
+ Permission.CreateProjectCallSMSConfig,
436
+ ],
437
+ read: [
438
+ Permission.ProjectOwner,
439
+ Permission.ProjectAdmin,
440
+ Permission.ProjectMember,
441
+ Permission.ReadProjectCallSMSConfig,
442
+ ],
443
+ update: [
444
+ Permission.ProjectOwner,
445
+ Permission.ProjectAdmin,
446
+ Permission.EditProjectCallSMSConfig,
447
+ ],
448
+ })
449
+ @TableColumn({
450
+ type: TableColumnType.LongText,
451
+ title: "Twilio Secondary Phone Numbers",
452
+ description: "Secondary Phone Number for your Twilio account",
453
+ })
454
+ @Column({
455
+ type: ColumnType.LongText,
456
+ length: ColumnLength.LongText,
457
+ nullable: true,
458
+ unique: false,
459
+ })
460
+ public twilioSecondaryPhoneNumbers?: string = undefined; // phone numbers seperated by comma
430
461
  }
@@ -744,4 +744,47 @@ export default class UserOnCallLog extends BaseModel {
744
744
  transformer: ObjectID.getDatabaseTransformer(),
745
745
  })
746
746
  public onCallDutyScheduleId?: ObjectID = undefined;
747
+
748
+ @ColumnAccessControl({
749
+ create: [],
750
+ read: [Permission.CurrentUser],
751
+ update: [],
752
+ })
753
+ @TableColumn({
754
+ manyToOneRelationColumn: "overridedByUserId",
755
+ type: TableColumnType.Entity,
756
+ modelType: User,
757
+ title: "Overridden by User",
758
+ description: "Relation to User who overrode this alert",
759
+ })
760
+ @ManyToOne(
761
+ () => {
762
+ return User;
763
+ },
764
+ {
765
+ eager: false,
766
+ nullable: true,
767
+ onDelete: "CASCADE",
768
+ orphanedRowAction: "nullify",
769
+ },
770
+ )
771
+ @JoinColumn({ name: "overridedByUserId" })
772
+ public overridedByUser?: User = undefined;
773
+
774
+ @ColumnAccessControl({
775
+ create: [],
776
+ read: [Permission.CurrentUser],
777
+ update: [],
778
+ })
779
+ @TableColumn({
780
+ type: TableColumnType.ObjectID,
781
+ title: "Overridden by User ID",
782
+ description: "User ID who overrode this alert",
783
+ })
784
+ @Column({
785
+ type: ColumnType.ObjectID,
786
+ nullable: true,
787
+ transformer: ObjectID.getDatabaseTransformer(),
788
+ })
789
+ public overridedByUserId?: ObjectID = undefined;
747
790
  }