@oneuptime/common 10.3.0 → 10.4.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 (115) hide show
  1. package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +522 -0
  2. package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +606 -0
  3. package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +508 -0
  4. package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +507 -0
  5. package/Models/DatabaseModels/Index.ts +24 -0
  6. package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +522 -0
  7. package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +606 -0
  8. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +522 -0
  9. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +606 -0
  10. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +508 -0
  11. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +507 -0
  12. package/Server/API/TelemetryAPI.ts +69 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.ts +153 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.ts +823 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  16. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +197 -0
  17. package/Server/Services/IncomingCallPolicyLabelRuleService.ts +10 -0
  18. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +220 -0
  19. package/Server/Services/IncomingCallPolicyOwnerRuleService.ts +10 -0
  20. package/Server/Services/IncomingCallPolicyOwnerTeamService.ts +9 -0
  21. package/Server/Services/IncomingCallPolicyOwnerUserService.ts +9 -0
  22. package/Server/Services/IncomingCallPolicyService.ts +35 -0
  23. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +191 -0
  24. package/Server/Services/OnCallDutyPolicyLabelRuleService.ts +10 -0
  25. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +214 -0
  26. package/Server/Services/OnCallDutyPolicyOwnerRuleService.ts +10 -0
  27. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +200 -0
  28. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.ts +10 -0
  29. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +223 -0
  30. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.ts +10 -0
  31. package/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.ts +9 -0
  32. package/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.ts +9 -0
  33. package/Server/Services/OnCallDutyPolicyScheduleService.ts +32 -1
  34. package/Server/Services/OnCallDutyPolicyService.ts +21 -0
  35. package/Server/Services/ProfileAggregationService.ts +119 -0
  36. package/Server/Types/Database/Permissions/QueryPermission.ts +36 -0
  37. package/Types/Monitor/MonitorStep.ts +66 -0
  38. package/Types/Permission.ts +475 -0
  39. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +532 -0
  40. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -0
  41. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +615 -0
  42. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -0
  43. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +524 -0
  44. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -0
  45. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +523 -0
  46. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -0
  47. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  48. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  49. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +532 -0
  50. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -0
  51. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +615 -0
  52. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -0
  53. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +532 -0
  54. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -0
  55. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +615 -0
  56. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -0
  57. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +524 -0
  58. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -0
  59. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +523 -0
  60. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -0
  61. package/build/dist/Server/API/TelemetryAPI.js +34 -0
  62. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  63. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.js +58 -0
  64. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.js.map +1 -0
  65. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.js +292 -0
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.js.map +1 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  69. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +158 -0
  70. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -0
  71. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleService.js +9 -0
  72. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleService.js.map +1 -0
  73. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +181 -0
  74. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -0
  75. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleService.js +9 -0
  76. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleService.js.map +1 -0
  77. package/build/dist/Server/Services/IncomingCallPolicyOwnerTeamService.js +9 -0
  78. package/build/dist/Server/Services/IncomingCallPolicyOwnerTeamService.js.map +1 -0
  79. package/build/dist/Server/Services/IncomingCallPolicyOwnerUserService.js +9 -0
  80. package/build/dist/Server/Services/IncomingCallPolicyOwnerUserService.js.map +1 -0
  81. package/build/dist/Server/Services/IncomingCallPolicyService.js +38 -0
  82. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  83. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +157 -0
  84. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -0
  85. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleService.js +9 -0
  86. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleService.js.map +1 -0
  87. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +180 -0
  88. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -0
  89. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleService.js +9 -0
  90. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleService.js.map +1 -0
  91. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +158 -0
  92. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -0
  93. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.js +9 -0
  94. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.js.map +1 -0
  95. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +181 -0
  96. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -0
  97. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.js +9 -0
  98. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.js.map +1 -0
  99. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.js +9 -0
  100. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.js.map +1 -0
  101. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.js +9 -0
  102. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.js.map +1 -0
  103. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +21 -0
  104. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  105. package/build/dist/Server/Services/OnCallDutyPolicyService.js +17 -3
  106. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  107. package/build/dist/Server/Services/ProfileAggregationService.js +80 -0
  108. package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
  109. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +25 -0
  110. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
  111. package/build/dist/Types/Monitor/MonitorStep.js +42 -0
  112. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  113. package/build/dist/Types/Permission.js +415 -0
  114. package/build/dist/Types/Permission.js.map +1 -1
  115. package/package.json +1 -1
@@ -0,0 +1,522 @@
1
+ import Label from "./Label";
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 ColumnLength from "../../Types/Database/ColumnLength";
9
+ import ColumnType from "../../Types/Database/ColumnType";
10
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
11
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
12
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
13
+ import TableColumn from "../../Types/Database/TableColumn";
14
+ import TableColumnType from "../../Types/Database/TableColumnType";
15
+ import TableMetadata from "../../Types/Database/TableMetadata";
16
+ import TenantColumn from "../../Types/Database/TenantColumn";
17
+ import IconProp from "../../Types/Icon/IconProp";
18
+ import ObjectID from "../../Types/ObjectID";
19
+ import Permission from "../../Types/Permission";
20
+ import {
21
+ Column,
22
+ Entity,
23
+ Index,
24
+ JoinColumn,
25
+ JoinTable,
26
+ ManyToMany,
27
+ ManyToOne,
28
+ } from "typeorm";
29
+
30
+ @EnableDocumentation()
31
+ @TenantColumn("projectId")
32
+ @TableAccessControl({
33
+ create: [
34
+ Permission.ProjectOwner,
35
+ Permission.ProjectAdmin,
36
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
37
+ ],
38
+ read: [
39
+ Permission.ProjectOwner,
40
+ Permission.ProjectAdmin,
41
+ Permission.ProjectMember,
42
+ Permission.Viewer,
43
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
44
+ Permission.ReadAllProjectResources,
45
+ ],
46
+ delete: [
47
+ Permission.ProjectOwner,
48
+ Permission.ProjectAdmin,
49
+ Permission.DeleteOnCallDutyPolicyScheduleLabelRule,
50
+ ],
51
+ update: [
52
+ Permission.ProjectOwner,
53
+ Permission.ProjectAdmin,
54
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
55
+ ],
56
+ })
57
+ @CrudApiEndpoint(new Route("/on-call-duty-policy-schedule-label-rule"))
58
+ @Entity({
59
+ name: "OnCallDutyPolicyScheduleLabelRule",
60
+ })
61
+ @EnableWorkflow({
62
+ create: true,
63
+ delete: true,
64
+ update: true,
65
+ read: true,
66
+ })
67
+ @TableMetadata({
68
+ tableName: "OnCallDutyPolicyScheduleLabelRule",
69
+ singularName: "On-Call Schedule Label Rule",
70
+ pluralName: "On-Call Schedule Label Rules",
71
+ icon: IconProp.Tag,
72
+ tableDescription:
73
+ "Configure rules for automatically attaching labels to on-call schedules when matching schedules are created",
74
+ })
75
+ export default class OnCallDutyPolicyScheduleLabelRule extends BaseModel {
76
+ @ColumnAccessControl({
77
+ create: [
78
+ Permission.ProjectOwner,
79
+ Permission.ProjectAdmin,
80
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
81
+ ],
82
+ read: [
83
+ Permission.ProjectOwner,
84
+ Permission.ProjectAdmin,
85
+ Permission.ProjectMember,
86
+ Permission.Viewer,
87
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
88
+ Permission.ReadAllProjectResources,
89
+ ],
90
+ update: [],
91
+ })
92
+ @TableColumn({
93
+ manyToOneRelationColumn: "projectId",
94
+ type: TableColumnType.Entity,
95
+ modelType: Project,
96
+ title: "Project",
97
+ description: "Relation to Project Resource in which this object belongs",
98
+ })
99
+ @ManyToOne(
100
+ () => {
101
+ return Project;
102
+ },
103
+ {
104
+ eager: false,
105
+ nullable: true,
106
+ onDelete: "CASCADE",
107
+ orphanedRowAction: "nullify",
108
+ },
109
+ )
110
+ @JoinColumn({ name: "projectId" })
111
+ public project?: Project = undefined;
112
+
113
+ @ColumnAccessControl({
114
+ create: [
115
+ Permission.ProjectOwner,
116
+ Permission.ProjectAdmin,
117
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
118
+ ],
119
+ read: [
120
+ Permission.ProjectOwner,
121
+ Permission.ProjectAdmin,
122
+ Permission.ProjectMember,
123
+ Permission.Viewer,
124
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
125
+ Permission.ReadAllProjectResources,
126
+ ],
127
+ update: [],
128
+ })
129
+ @Index()
130
+ @TableColumn({
131
+ type: TableColumnType.ObjectID,
132
+ required: true,
133
+ canReadOnRelationQuery: true,
134
+ title: "Project ID",
135
+ description: "ID of your OneUptime Project in which this object belongs",
136
+ })
137
+ @Column({
138
+ type: ColumnType.ObjectID,
139
+ nullable: false,
140
+ transformer: ObjectID.getDatabaseTransformer(),
141
+ })
142
+ public projectId?: ObjectID = undefined;
143
+
144
+ @ColumnAccessControl({
145
+ create: [
146
+ Permission.ProjectOwner,
147
+ Permission.ProjectAdmin,
148
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
149
+ ],
150
+ read: [
151
+ Permission.ProjectOwner,
152
+ Permission.ProjectAdmin,
153
+ Permission.ProjectMember,
154
+ Permission.Viewer,
155
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
156
+ Permission.ReadAllProjectResources,
157
+ ],
158
+ update: [
159
+ Permission.ProjectOwner,
160
+ Permission.ProjectAdmin,
161
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
162
+ ],
163
+ })
164
+ @Index()
165
+ @TableColumn({
166
+ required: true,
167
+ type: TableColumnType.ShortText,
168
+ canReadOnRelationQuery: true,
169
+ title: "Name",
170
+ description: "Name of this on-call schedule label rule",
171
+ })
172
+ @Column({
173
+ nullable: false,
174
+ type: ColumnType.ShortText,
175
+ length: ColumnLength.ShortText,
176
+ })
177
+ public name?: string = undefined;
178
+
179
+ @ColumnAccessControl({
180
+ create: [
181
+ Permission.ProjectOwner,
182
+ Permission.ProjectAdmin,
183
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
184
+ ],
185
+ read: [
186
+ Permission.ProjectOwner,
187
+ Permission.ProjectAdmin,
188
+ Permission.ProjectMember,
189
+ Permission.Viewer,
190
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
191
+ Permission.ReadAllProjectResources,
192
+ ],
193
+ update: [
194
+ Permission.ProjectOwner,
195
+ Permission.ProjectAdmin,
196
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
197
+ ],
198
+ })
199
+ @TableColumn({
200
+ required: false,
201
+ type: TableColumnType.LongText,
202
+ title: "Description",
203
+ description: "Description of this on-call schedule label rule",
204
+ })
205
+ @Column({
206
+ nullable: true,
207
+ type: ColumnType.LongText,
208
+ length: ColumnLength.LongText,
209
+ })
210
+ public description?: string = undefined;
211
+
212
+ @ColumnAccessControl({
213
+ create: [
214
+ Permission.ProjectOwner,
215
+ Permission.ProjectAdmin,
216
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
217
+ ],
218
+ read: [
219
+ Permission.ProjectOwner,
220
+ Permission.ProjectAdmin,
221
+ Permission.ProjectMember,
222
+ Permission.Viewer,
223
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
224
+ Permission.ReadAllProjectResources,
225
+ ],
226
+ update: [
227
+ Permission.ProjectOwner,
228
+ Permission.ProjectAdmin,
229
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
230
+ ],
231
+ })
232
+ @Index()
233
+ @TableColumn({
234
+ required: true,
235
+ type: TableColumnType.Boolean,
236
+ title: "Is Enabled",
237
+ description: "Whether this rule is enabled",
238
+ defaultValue: true,
239
+ isDefaultValueColumn: true,
240
+ })
241
+ @Column({
242
+ type: ColumnType.Boolean,
243
+ nullable: false,
244
+ default: true,
245
+ })
246
+ public isEnabled?: boolean = undefined;
247
+
248
+ @ColumnAccessControl({
249
+ create: [
250
+ Permission.ProjectOwner,
251
+ Permission.ProjectAdmin,
252
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
253
+ ],
254
+ read: [
255
+ Permission.ProjectOwner,
256
+ Permission.ProjectAdmin,
257
+ Permission.ProjectMember,
258
+ Permission.Viewer,
259
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
260
+ Permission.ReadAllProjectResources,
261
+ ],
262
+ update: [
263
+ Permission.ProjectOwner,
264
+ Permission.ProjectAdmin,
265
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
266
+ ],
267
+ })
268
+ @TableColumn({
269
+ required: false,
270
+ type: TableColumnType.EntityArray,
271
+ modelType: Label,
272
+ title: "On-Call Schedule Labels",
273
+ description:
274
+ "Only trigger for on-call schedules that already have at least one of these labels. Leave empty to match regardless of labels.",
275
+ })
276
+ @ManyToMany(
277
+ () => {
278
+ return Label;
279
+ },
280
+ { eager: false },
281
+ )
282
+ @JoinTable({
283
+ name: "OnCallScheduleLabelRuleMatchLabel",
284
+ inverseJoinColumn: {
285
+ name: "labelId",
286
+ referencedColumnName: "_id",
287
+ },
288
+ joinColumn: {
289
+ name: "onCallDutyPolicyScheduleLabelRuleId",
290
+ referencedColumnName: "_id",
291
+ },
292
+ })
293
+ public onCallDutyPolicyScheduleLabels?: Array<Label> = undefined;
294
+
295
+ @ColumnAccessControl({
296
+ create: [
297
+ Permission.ProjectOwner,
298
+ Permission.ProjectAdmin,
299
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
300
+ ],
301
+ read: [
302
+ Permission.ProjectOwner,
303
+ Permission.ProjectAdmin,
304
+ Permission.ProjectMember,
305
+ Permission.Viewer,
306
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
307
+ Permission.ReadAllProjectResources,
308
+ ],
309
+ update: [
310
+ Permission.ProjectOwner,
311
+ Permission.ProjectAdmin,
312
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
313
+ ],
314
+ })
315
+ @TableColumn({
316
+ required: false,
317
+ type: TableColumnType.LongText,
318
+ title: "On-Call Schedule Name Pattern",
319
+ description:
320
+ "Regex (case-insensitive) matched against the on-call schedule name. Leave empty to match any name.",
321
+ })
322
+ @Column({
323
+ type: ColumnType.LongText,
324
+ nullable: true,
325
+ length: ColumnLength.LongText,
326
+ })
327
+ public onCallDutyPolicyScheduleNamePattern?: string = undefined;
328
+
329
+ @ColumnAccessControl({
330
+ create: [
331
+ Permission.ProjectOwner,
332
+ Permission.ProjectAdmin,
333
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
334
+ ],
335
+ read: [
336
+ Permission.ProjectOwner,
337
+ Permission.ProjectAdmin,
338
+ Permission.ProjectMember,
339
+ Permission.Viewer,
340
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
341
+ Permission.ReadAllProjectResources,
342
+ ],
343
+ update: [
344
+ Permission.ProjectOwner,
345
+ Permission.ProjectAdmin,
346
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
347
+ ],
348
+ })
349
+ @TableColumn({
350
+ required: false,
351
+ type: TableColumnType.LongText,
352
+ title: "On-Call Schedule Description Pattern",
353
+ description:
354
+ "Regex (case-insensitive) matched against the on-call schedule description. Leave empty to match any description.",
355
+ })
356
+ @Column({
357
+ type: ColumnType.LongText,
358
+ nullable: true,
359
+ length: ColumnLength.LongText,
360
+ })
361
+ public onCallDutyPolicyScheduleDescriptionPattern?: string = undefined;
362
+
363
+ @ColumnAccessControl({
364
+ create: [
365
+ Permission.ProjectOwner,
366
+ Permission.ProjectAdmin,
367
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
368
+ ],
369
+ read: [
370
+ Permission.ProjectOwner,
371
+ Permission.ProjectAdmin,
372
+ Permission.ProjectMember,
373
+ Permission.Viewer,
374
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
375
+ Permission.ReadAllProjectResources,
376
+ ],
377
+ update: [
378
+ Permission.ProjectOwner,
379
+ Permission.ProjectAdmin,
380
+ Permission.EditOnCallDutyPolicyScheduleLabelRule,
381
+ ],
382
+ })
383
+ @TableColumn({
384
+ required: false,
385
+ type: TableColumnType.EntityArray,
386
+ modelType: Label,
387
+ title: "Labels to Add",
388
+ description:
389
+ "Labels to attach to the on-call schedule when this rule matches. Already-attached labels are not duplicated.",
390
+ })
391
+ @ManyToMany(
392
+ () => {
393
+ return Label;
394
+ },
395
+ { eager: false },
396
+ )
397
+ @JoinTable({
398
+ name: "OnCallScheduleLabelRuleLabelToAdd",
399
+ inverseJoinColumn: {
400
+ name: "labelId",
401
+ referencedColumnName: "_id",
402
+ },
403
+ joinColumn: {
404
+ name: "onCallDutyPolicyScheduleLabelRuleId",
405
+ referencedColumnName: "_id",
406
+ },
407
+ })
408
+ public labelsToAdd?: Array<Label> = undefined;
409
+
410
+ @ColumnAccessControl({
411
+ create: [
412
+ Permission.ProjectOwner,
413
+ Permission.ProjectAdmin,
414
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
415
+ ],
416
+ read: [
417
+ Permission.ProjectOwner,
418
+ Permission.ProjectAdmin,
419
+ Permission.ProjectMember,
420
+ Permission.Viewer,
421
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
422
+ Permission.ReadAllProjectResources,
423
+ ],
424
+ update: [],
425
+ })
426
+ @TableColumn({
427
+ manyToOneRelationColumn: "createdByUserId",
428
+ type: TableColumnType.Entity,
429
+ modelType: User,
430
+ title: "Created by User",
431
+ description:
432
+ "Relation to User who created this object (if this object was created by a User)",
433
+ })
434
+ @ManyToOne(
435
+ () => {
436
+ return User;
437
+ },
438
+ {
439
+ eager: false,
440
+ nullable: true,
441
+ onDelete: "SET NULL",
442
+ orphanedRowAction: "nullify",
443
+ },
444
+ )
445
+ @JoinColumn({ name: "createdByUserId" })
446
+ public createdByUser?: User = undefined;
447
+
448
+ @ColumnAccessControl({
449
+ create: [
450
+ Permission.ProjectOwner,
451
+ Permission.ProjectAdmin,
452
+ Permission.CreateOnCallDutyPolicyScheduleLabelRule,
453
+ ],
454
+ read: [
455
+ Permission.ProjectOwner,
456
+ Permission.ProjectAdmin,
457
+ Permission.ProjectMember,
458
+ Permission.Viewer,
459
+ Permission.ReadOnCallDutyPolicyScheduleLabelRule,
460
+ Permission.ReadAllProjectResources,
461
+ ],
462
+ update: [],
463
+ })
464
+ @TableColumn({
465
+ type: TableColumnType.ObjectID,
466
+ title: "Created by User ID",
467
+ description:
468
+ "User ID who created this object (if this object was created by a User)",
469
+ })
470
+ @Column({
471
+ type: ColumnType.ObjectID,
472
+ nullable: true,
473
+ transformer: ObjectID.getDatabaseTransformer(),
474
+ })
475
+ public createdByUserId?: ObjectID = undefined;
476
+
477
+ @ColumnAccessControl({
478
+ create: [],
479
+ read: [],
480
+ update: [],
481
+ })
482
+ @TableColumn({
483
+ manyToOneRelationColumn: "deletedByUserId",
484
+ type: TableColumnType.Entity,
485
+ title: "Deleted by User",
486
+ modelType: User,
487
+ description:
488
+ "Relation to User who deleted this object (if this object was deleted by a User)",
489
+ })
490
+ @ManyToOne(
491
+ () => {
492
+ return User;
493
+ },
494
+ {
495
+ cascade: false,
496
+ eager: false,
497
+ nullable: true,
498
+ onDelete: "SET NULL",
499
+ orphanedRowAction: "nullify",
500
+ },
501
+ )
502
+ @JoinColumn({ name: "deletedByUserId" })
503
+ public deletedByUser?: User = undefined;
504
+
505
+ @ColumnAccessControl({
506
+ create: [],
507
+ read: [],
508
+ update: [],
509
+ })
510
+ @TableColumn({
511
+ type: TableColumnType.ObjectID,
512
+ title: "Deleted by User ID",
513
+ description:
514
+ "User ID who deleted this object (if this object was deleted by a User)",
515
+ })
516
+ @Column({
517
+ type: ColumnType.ObjectID,
518
+ nullable: true,
519
+ transformer: ObjectID.getDatabaseTransformer(),
520
+ })
521
+ public deletedByUserId?: ObjectID = undefined;
522
+ }