@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.
- package/Models/DatabaseModels/GlobalConfig.ts +22 -4
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.ts +48 -0
- package/Models/DatabaseModels/OnCallDutyPolicyUserOverride.ts +502 -0
- package/Models/DatabaseModels/ProjectCallSMSConfig.ts +35 -4
- package/Models/DatabaseModels/UserOnCallLog.ts +43 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741904597606-MigrationName.ts +69 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741908200702-MigrationName.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741955609393-MigrationName.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741955752685-MigrationName.ts +23 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741957080431-MigrationName.ts +23 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741959216297-MigrationName.ts +23 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Services/CallService.ts +4 -1
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +90 -3
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +17 -1
- package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +77 -0
- package/Server/Services/ProjectCallSMSConfigService.ts +12 -2
- package/Server/Services/SmsService.ts +4 -1
- package/Server/Services/StatusPageSubscriberService.ts +4 -2
- package/Server/Services/UserNotificationRuleService.ts +5 -0
- package/Types/CallAndSMS/TwilioConfig.ts +2 -1
- package/Types/Permission.ts +38 -0
- package/Types/Phone.ts +61 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -5
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js +49 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js +516 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +38 -5
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +44 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741904597606-MigrationName.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741904597606-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741908200702-MigrationName.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741908200702-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955609393-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955609393-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955752685-MigrationName.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741955752685-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741957080431-MigrationName.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741957080431-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741959216297-MigrationName.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741959216297-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/CallService.js +3 -2
- package/build/dist/Server/Services/CallService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +59 -3
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +14 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +49 -0
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -0
- package/build/dist/Server/Services/ProjectCallSMSConfigService.js +11 -2
- package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
- package/build/dist/Server/Services/SmsService.js +3 -2
- package/build/dist/Server/Services/SmsService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +4 -2
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +3 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Types/Permission.js +32 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Phone.js +32 -0
- package/build/dist/Types/Phone.js.map +1 -1
- 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:
|
|
242
|
+
unique: false,
|
|
243
243
|
transformer: Phone.getDatabaseTransformer(),
|
|
244
244
|
})
|
|
245
|
-
public
|
|
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:
|
|
426
|
+
unique: false,
|
|
427
427
|
transformer: Phone.getDatabaseTransformer(),
|
|
428
428
|
})
|
|
429
|
-
public
|
|
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
|
}
|