@oneuptime/common 12.0.29 → 12.0.30
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/Index.ts +11 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
- package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
- package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
- package/Server/API/OnCallCalendarAPI.ts +2194 -0
- package/Server/EnvironmentConfig.ts +138 -0
- package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
- package/Server/Services/Index.ts +12 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
- package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
- package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
- package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
- package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
- package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
- package/Server/Services/TeamMemberService.ts +489 -1
- package/Server/Services/TeamService.ts +50 -0
- package/Server/Services/UserNotificationSettingService.ts +44 -1
- package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
- package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
- package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
- package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
- package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
- package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
- package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
- package/Server/Utils/Response.ts +134 -0
- package/Server/Utils/StartServer.ts +10 -0
- package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
- package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
- package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
- package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
- package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
- package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
- package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
- package/Tests/Server/API/Helpers.ts +8 -0
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
- package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +369 -0
- package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
- package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
- package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
- package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
- package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
- package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
- package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
- package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
- package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
- package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
- package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
- package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
- package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
- package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
- package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
- package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
- package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
- package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Types/Calendar/ICalendar.ts +442 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
- package/Types/OnCallDutyPolicy/Layer.ts +190 -35
- package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
- package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
- package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
- package/build/dist/Models/DatabaseModels/Index.js +11 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +102 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
- package/build/dist/Server/Services/Index.js +12 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/TeamMemberService.js +396 -1
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +43 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +97 -0
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +9 -1
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- package/build/dist/Types/Calendar/ICalendar.js +290 -0
- package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import Project from "./Project";
|
|
11
|
+
import User from "./User";
|
|
12
|
+
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
13
|
+
import Route from "../../Types/API/Route";
|
|
14
|
+
import AllowAccessIfSubscriptionIsUnpaid from "../../Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid";
|
|
15
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
16
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
17
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
18
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
19
|
+
import CurrentUserCanAccessRecordBy from "../../Types/Database/CurrentUserCanAccessRecordBy";
|
|
20
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
21
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
22
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
23
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
24
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
25
|
+
import ObjectID from "../../Types/ObjectID";
|
|
26
|
+
import Permission from "../../Types/Permission";
|
|
27
|
+
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
28
|
+
/*
|
|
29
|
+
* Bounds on the lead time, shared with the dashboard's custom-lead input.
|
|
30
|
+
* Below 15 minutes the reminder races the shift's own hand-off notification;
|
|
31
|
+
* above two weeks the roster is not settled enough to be worth interrupting
|
|
32
|
+
* for.
|
|
33
|
+
*/
|
|
34
|
+
export const MIN_MINUTES_BEFORE_SHIFT = 15;
|
|
35
|
+
export const MAX_MINUTES_BEFORE_SHIFT = 14 * 24 * 60;
|
|
36
|
+
/*
|
|
37
|
+
* "Remind me N minutes before my on-call shift starts."
|
|
38
|
+
*
|
|
39
|
+
* One row per lead time a user has configured in a project - the settings
|
|
40
|
+
* page's chips (1 week / 1 day / 1 hour / 15 min / custom) are rows here.
|
|
41
|
+
* UNIQUE (projectId, userId, minutesBeforeShift) makes a double-click on a
|
|
42
|
+
* chip a no-op rather than a duplicate reminder. The reminder worker reads
|
|
43
|
+
* these, materializes the user's upcoming shifts, and sends through the
|
|
44
|
+
* user's notification settings for SEND_BEFORE_USER_ON_CALL_SHIFT_STARTS.
|
|
45
|
+
*
|
|
46
|
+
* Shaped like UserNotificationSetting: tenant scoped, owned by the user
|
|
47
|
+
* (@CurrentUserCanAccessRecordBy), every operation open to the owner and to
|
|
48
|
+
* nobody else. The service bounds minutesBeforeShift to 15 min ... 2 weeks.
|
|
49
|
+
*/
|
|
50
|
+
let UserOnCallShiftReminder = class UserOnCallShiftReminder extends BaseModel {
|
|
51
|
+
constructor() {
|
|
52
|
+
super(...arguments);
|
|
53
|
+
this.project = undefined;
|
|
54
|
+
this.projectId = undefined;
|
|
55
|
+
this.user = undefined;
|
|
56
|
+
this.userId = undefined;
|
|
57
|
+
/*
|
|
58
|
+
* Lead time in minutes. 15 ... 20160 (two weeks), enforced by the service:
|
|
59
|
+
* below 15 the reminder races the shift's own hand-off notification, above
|
|
60
|
+
* two weeks the roster is not settled enough to be worth interrupting for.
|
|
61
|
+
*/
|
|
62
|
+
this.minutesBeforeShift = undefined;
|
|
63
|
+
this.deletedByUser = undefined;
|
|
64
|
+
this.deletedByUserId = undefined;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
__decorate([
|
|
68
|
+
ColumnAccessControl({
|
|
69
|
+
create: [Permission.CurrentUser],
|
|
70
|
+
read: [Permission.CurrentUser],
|
|
71
|
+
update: [],
|
|
72
|
+
}),
|
|
73
|
+
TableColumn({
|
|
74
|
+
manyToOneRelationColumn: "projectId",
|
|
75
|
+
type: TableColumnType.Entity,
|
|
76
|
+
modelType: Project,
|
|
77
|
+
title: "Project",
|
|
78
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
79
|
+
}),
|
|
80
|
+
ManyToOne(() => {
|
|
81
|
+
return Project;
|
|
82
|
+
}, {
|
|
83
|
+
eager: false,
|
|
84
|
+
nullable: true,
|
|
85
|
+
onDelete: "CASCADE",
|
|
86
|
+
orphanedRowAction: "nullify",
|
|
87
|
+
}),
|
|
88
|
+
JoinColumn({ name: "projectId" }),
|
|
89
|
+
__metadata("design:type", Project)
|
|
90
|
+
], UserOnCallShiftReminder.prototype, "project", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
ColumnAccessControl({
|
|
93
|
+
create: [Permission.CurrentUser],
|
|
94
|
+
read: [Permission.CurrentUser],
|
|
95
|
+
update: [],
|
|
96
|
+
}),
|
|
97
|
+
Index(),
|
|
98
|
+
TableColumn({
|
|
99
|
+
type: TableColumnType.ObjectID,
|
|
100
|
+
required: true,
|
|
101
|
+
canReadOnRelationQuery: true,
|
|
102
|
+
title: "Project ID",
|
|
103
|
+
description: "ID of your OneUptime Project in which this object belongs",
|
|
104
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
105
|
+
}),
|
|
106
|
+
Column({
|
|
107
|
+
type: ColumnType.ObjectID,
|
|
108
|
+
nullable: false,
|
|
109
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
110
|
+
}),
|
|
111
|
+
__metadata("design:type", ObjectID)
|
|
112
|
+
], UserOnCallShiftReminder.prototype, "projectId", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
ColumnAccessControl({
|
|
115
|
+
create: [Permission.CurrentUser],
|
|
116
|
+
read: [Permission.CurrentUser],
|
|
117
|
+
update: [],
|
|
118
|
+
}),
|
|
119
|
+
TableColumn({
|
|
120
|
+
manyToOneRelationColumn: "userId",
|
|
121
|
+
type: TableColumnType.Entity,
|
|
122
|
+
modelType: User,
|
|
123
|
+
title: "User",
|
|
124
|
+
description: "Relation to the User who wants to be reminded",
|
|
125
|
+
}),
|
|
126
|
+
ManyToOne(() => {
|
|
127
|
+
return User;
|
|
128
|
+
}, {
|
|
129
|
+
eager: false,
|
|
130
|
+
nullable: true,
|
|
131
|
+
onDelete: "CASCADE",
|
|
132
|
+
orphanedRowAction: "nullify",
|
|
133
|
+
}),
|
|
134
|
+
JoinColumn({ name: "userId" }),
|
|
135
|
+
__metadata("design:type", User)
|
|
136
|
+
], UserOnCallShiftReminder.prototype, "user", void 0);
|
|
137
|
+
__decorate([
|
|
138
|
+
ColumnAccessControl({
|
|
139
|
+
create: [Permission.CurrentUser],
|
|
140
|
+
read: [Permission.CurrentUser],
|
|
141
|
+
update: [],
|
|
142
|
+
}),
|
|
143
|
+
Index(),
|
|
144
|
+
TableColumn({
|
|
145
|
+
type: TableColumnType.ObjectID,
|
|
146
|
+
required: true,
|
|
147
|
+
canReadOnRelationQuery: true,
|
|
148
|
+
title: "User ID",
|
|
149
|
+
description: "ID of the User who wants to be reminded",
|
|
150
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
151
|
+
}),
|
|
152
|
+
Column({
|
|
153
|
+
type: ColumnType.ObjectID,
|
|
154
|
+
nullable: false,
|
|
155
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
156
|
+
}),
|
|
157
|
+
__metadata("design:type", ObjectID)
|
|
158
|
+
], UserOnCallShiftReminder.prototype, "userId", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
ColumnAccessControl({
|
|
161
|
+
create: [Permission.CurrentUser],
|
|
162
|
+
read: [Permission.CurrentUser],
|
|
163
|
+
update: [Permission.CurrentUser],
|
|
164
|
+
}),
|
|
165
|
+
TableColumn({
|
|
166
|
+
required: true,
|
|
167
|
+
type: TableColumnType.Number,
|
|
168
|
+
canReadOnRelationQuery: true,
|
|
169
|
+
title: "Minutes Before Shift",
|
|
170
|
+
description: "How many minutes before the shift starts to send the reminder (15 to 20160).",
|
|
171
|
+
example: 60,
|
|
172
|
+
}),
|
|
173
|
+
Column({
|
|
174
|
+
type: ColumnType.Number,
|
|
175
|
+
nullable: false,
|
|
176
|
+
}),
|
|
177
|
+
__metadata("design:type", Number)
|
|
178
|
+
], UserOnCallShiftReminder.prototype, "minutesBeforeShift", void 0);
|
|
179
|
+
__decorate([
|
|
180
|
+
ColumnAccessControl({
|
|
181
|
+
create: [],
|
|
182
|
+
read: [],
|
|
183
|
+
update: [],
|
|
184
|
+
}),
|
|
185
|
+
TableColumn({
|
|
186
|
+
manyToOneRelationColumn: "deletedByUserId",
|
|
187
|
+
type: TableColumnType.Entity,
|
|
188
|
+
title: "Deleted by User",
|
|
189
|
+
modelType: User,
|
|
190
|
+
description: "Relation to User who deleted this object (if this object was deleted by a User)",
|
|
191
|
+
}),
|
|
192
|
+
ManyToOne(() => {
|
|
193
|
+
return User;
|
|
194
|
+
}, {
|
|
195
|
+
cascade: false,
|
|
196
|
+
eager: false,
|
|
197
|
+
nullable: true,
|
|
198
|
+
onDelete: "SET NULL",
|
|
199
|
+
orphanedRowAction: "nullify",
|
|
200
|
+
}),
|
|
201
|
+
JoinColumn({ name: "deletedByUserId" }),
|
|
202
|
+
__metadata("design:type", User)
|
|
203
|
+
], UserOnCallShiftReminder.prototype, "deletedByUser", void 0);
|
|
204
|
+
__decorate([
|
|
205
|
+
ColumnAccessControl({
|
|
206
|
+
create: [],
|
|
207
|
+
read: [],
|
|
208
|
+
update: [],
|
|
209
|
+
}),
|
|
210
|
+
TableColumn({
|
|
211
|
+
type: TableColumnType.ObjectID,
|
|
212
|
+
title: "Deleted by User ID",
|
|
213
|
+
description: "User ID who deleted this object (if this object was deleted by a User)",
|
|
214
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
215
|
+
}),
|
|
216
|
+
Column({
|
|
217
|
+
type: ColumnType.ObjectID,
|
|
218
|
+
nullable: true,
|
|
219
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
220
|
+
}),
|
|
221
|
+
__metadata("design:type", ObjectID)
|
|
222
|
+
], UserOnCallShiftReminder.prototype, "deletedByUserId", void 0);
|
|
223
|
+
UserOnCallShiftReminder = __decorate([
|
|
224
|
+
TenantColumn("projectId"),
|
|
225
|
+
AllowAccessIfSubscriptionIsUnpaid(),
|
|
226
|
+
TableAccessControl({
|
|
227
|
+
create: [Permission.CurrentUser],
|
|
228
|
+
read: [Permission.CurrentUser],
|
|
229
|
+
delete: [Permission.CurrentUser],
|
|
230
|
+
update: [Permission.CurrentUser],
|
|
231
|
+
}),
|
|
232
|
+
CrudApiEndpoint(new Route("/user-on-call-shift-reminder")),
|
|
233
|
+
Entity({
|
|
234
|
+
name: "UserOnCallShiftReminder",
|
|
235
|
+
}),
|
|
236
|
+
TableMetadata({
|
|
237
|
+
tableName: "UserOnCallShiftReminder",
|
|
238
|
+
singularName: "On-Call Shift Reminder",
|
|
239
|
+
pluralName: "On-Call Shift Reminders",
|
|
240
|
+
icon: IconProp.Bell,
|
|
241
|
+
tableDescription: "How long before an on-call shift starts a user wants to be reminded.",
|
|
242
|
+
}),
|
|
243
|
+
CurrentUserCanAccessRecordBy("userId"),
|
|
244
|
+
Index(["projectId", "userId", "minutesBeforeShift"], { unique: true })
|
|
245
|
+
], UserOnCallShiftReminder);
|
|
246
|
+
export default UserOnCallShiftReminder;
|
|
247
|
+
//# sourceMappingURL=UserOnCallShiftReminder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOnCallShiftReminder.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/UserOnCallShiftReminder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import OnCallDutyPolicySchedule from "./OnCallDutyPolicySchedule";
|
|
11
|
+
import Project from "./Project";
|
|
12
|
+
import User from "./User";
|
|
13
|
+
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
14
|
+
import Route from "../../Types/API/Route";
|
|
15
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
16
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
17
|
+
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
18
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
19
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
20
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
21
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
22
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
23
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
24
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
25
|
+
import ObjectID from "../../Types/ObjectID";
|
|
26
|
+
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
27
|
+
/*
|
|
28
|
+
* What a shift reminder log row records.
|
|
29
|
+
*
|
|
30
|
+
* reminder - the ordinary "your shift starts in N minutes" message.
|
|
31
|
+
* catch-up - a late reminder for a shift the user only just acquired
|
|
32
|
+
* (an override created inside one of their lead windows).
|
|
33
|
+
* reassigned - "your shift at 18:00 is now covered by B", sent when a
|
|
34
|
+
* shift the user was already reminded about moves away.
|
|
35
|
+
*/
|
|
36
|
+
export var UserOnCallShiftReminderLogKind;
|
|
37
|
+
(function (UserOnCallShiftReminderLogKind) {
|
|
38
|
+
UserOnCallShiftReminderLogKind["Reminder"] = "reminder";
|
|
39
|
+
UserOnCallShiftReminderLogKind["CatchUp"] = "catch-up";
|
|
40
|
+
UserOnCallShiftReminderLogKind["Reassigned"] = "reassigned";
|
|
41
|
+
})(UserOnCallShiftReminderLogKind || (UserOnCallShiftReminderLogKind = {}));
|
|
42
|
+
/*
|
|
43
|
+
* The idempotency ledger of the shift-reminder worker.
|
|
44
|
+
*
|
|
45
|
+
* A reminder is CLAIMED by inserting a row (sentAt NULL), SENT, then STAMPED
|
|
46
|
+
* (sentAt set). The UNIQUE index over (userId, schedule, shiftStartsAt,
|
|
47
|
+
* minutesBeforeShift, kind) is the whole point: two worker replicas, a
|
|
48
|
+
* re-run after a crash, or a watermark that re-covers the same window all
|
|
49
|
+
* collapse into one send, because only one insert can win. shiftStartsAt is
|
|
50
|
+
* minute-truncated and seam-normalised by the worker so a start that moves
|
|
51
|
+
* by a second does not mint a new key.
|
|
52
|
+
*
|
|
53
|
+
* Postgres rather than Redis because compose Redis is non-persistent
|
|
54
|
+
* (`--save "" --appendonly no`), and a cache flush must never re-page anyone.
|
|
55
|
+
*
|
|
56
|
+
* ROOT ONLY. Every table access list is empty: nothing about this ledger is a
|
|
57
|
+
* user-facing resource, and a user who could delete their own claim rows
|
|
58
|
+
* could re-trigger reminders. The CRUD route exists only so the model is
|
|
59
|
+
* addressable like every other tenant model; every operation on it is denied.
|
|
60
|
+
*/
|
|
61
|
+
let UserOnCallShiftReminderLog = class UserOnCallShiftReminderLog extends BaseModel {
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
this.project = undefined;
|
|
65
|
+
this.projectId = undefined;
|
|
66
|
+
this.user = undefined;
|
|
67
|
+
this.userId = undefined;
|
|
68
|
+
this.onCallDutyPolicySchedule = undefined;
|
|
69
|
+
this.onCallDutyPolicyScheduleId = undefined;
|
|
70
|
+
/*
|
|
71
|
+
* The shift's start instant, minute-truncated and seam-normalised. Part of
|
|
72
|
+
* the idempotency key, so a shift whose computed start drifts by a second
|
|
73
|
+
* between two runs does not earn a second reminder.
|
|
74
|
+
*/
|
|
75
|
+
this.shiftStartsAt = undefined;
|
|
76
|
+
/*
|
|
77
|
+
* The configured lead this reminder was sent for; 0 for change notices
|
|
78
|
+
* (catch-up / reassigned), which are not tied to a lead.
|
|
79
|
+
*/
|
|
80
|
+
this.minutesBeforeShift = undefined;
|
|
81
|
+
this.kind = undefined;
|
|
82
|
+
/*
|
|
83
|
+
* When the row was claimed. A claim older than ten minutes with sentAt still
|
|
84
|
+
* NULL is a send that died mid-flight and may be re-claimed.
|
|
85
|
+
*/
|
|
86
|
+
this.claimedAt = undefined;
|
|
87
|
+
this.sentAt = undefined;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
__decorate([
|
|
91
|
+
ColumnAccessControl({
|
|
92
|
+
create: [],
|
|
93
|
+
read: [],
|
|
94
|
+
update: [],
|
|
95
|
+
}),
|
|
96
|
+
TableColumn({
|
|
97
|
+
manyToOneRelationColumn: "projectId",
|
|
98
|
+
type: TableColumnType.Entity,
|
|
99
|
+
modelType: Project,
|
|
100
|
+
title: "Project",
|
|
101
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
102
|
+
}),
|
|
103
|
+
ManyToOne(() => {
|
|
104
|
+
return Project;
|
|
105
|
+
}, {
|
|
106
|
+
eager: false,
|
|
107
|
+
nullable: true,
|
|
108
|
+
onDelete: "CASCADE",
|
|
109
|
+
orphanedRowAction: "nullify",
|
|
110
|
+
}),
|
|
111
|
+
JoinColumn({ name: "projectId" }),
|
|
112
|
+
__metadata("design:type", Project)
|
|
113
|
+
], UserOnCallShiftReminderLog.prototype, "project", void 0);
|
|
114
|
+
__decorate([
|
|
115
|
+
ColumnAccessControl({
|
|
116
|
+
create: [],
|
|
117
|
+
read: [],
|
|
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
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
128
|
+
}),
|
|
129
|
+
Column({
|
|
130
|
+
type: ColumnType.ObjectID,
|
|
131
|
+
nullable: false,
|
|
132
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
133
|
+
}),
|
|
134
|
+
__metadata("design:type", ObjectID)
|
|
135
|
+
], UserOnCallShiftReminderLog.prototype, "projectId", void 0);
|
|
136
|
+
__decorate([
|
|
137
|
+
ColumnAccessControl({
|
|
138
|
+
create: [],
|
|
139
|
+
read: [],
|
|
140
|
+
update: [],
|
|
141
|
+
}),
|
|
142
|
+
TableColumn({
|
|
143
|
+
manyToOneRelationColumn: "userId",
|
|
144
|
+
type: TableColumnType.Entity,
|
|
145
|
+
modelType: User,
|
|
146
|
+
title: "User",
|
|
147
|
+
description: "Relation to the User this reminder was for",
|
|
148
|
+
}),
|
|
149
|
+
ManyToOne(() => {
|
|
150
|
+
return User;
|
|
151
|
+
}, {
|
|
152
|
+
eager: false,
|
|
153
|
+
nullable: true,
|
|
154
|
+
onDelete: "CASCADE",
|
|
155
|
+
orphanedRowAction: "nullify",
|
|
156
|
+
}),
|
|
157
|
+
JoinColumn({ name: "userId" }),
|
|
158
|
+
__metadata("design:type", User)
|
|
159
|
+
], UserOnCallShiftReminderLog.prototype, "user", void 0);
|
|
160
|
+
__decorate([
|
|
161
|
+
ColumnAccessControl({
|
|
162
|
+
create: [],
|
|
163
|
+
read: [],
|
|
164
|
+
update: [],
|
|
165
|
+
}),
|
|
166
|
+
Index(),
|
|
167
|
+
TableColumn({
|
|
168
|
+
type: TableColumnType.ObjectID,
|
|
169
|
+
required: true,
|
|
170
|
+
canReadOnRelationQuery: true,
|
|
171
|
+
title: "User ID",
|
|
172
|
+
description: "ID of the User this reminder was for",
|
|
173
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
174
|
+
}),
|
|
175
|
+
Column({
|
|
176
|
+
type: ColumnType.ObjectID,
|
|
177
|
+
nullable: false,
|
|
178
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
179
|
+
}),
|
|
180
|
+
__metadata("design:type", ObjectID)
|
|
181
|
+
], UserOnCallShiftReminderLog.prototype, "userId", void 0);
|
|
182
|
+
__decorate([
|
|
183
|
+
ColumnAccessControl({
|
|
184
|
+
create: [],
|
|
185
|
+
read: [],
|
|
186
|
+
update: [],
|
|
187
|
+
}),
|
|
188
|
+
TableColumn({
|
|
189
|
+
manyToOneRelationColumn: "onCallDutyPolicyScheduleId",
|
|
190
|
+
type: TableColumnType.Entity,
|
|
191
|
+
modelType: OnCallDutyPolicySchedule,
|
|
192
|
+
title: "On-Call Policy Schedule",
|
|
193
|
+
description: "Relation to the schedule the reminded shift is on.",
|
|
194
|
+
}),
|
|
195
|
+
ManyToOne(() => {
|
|
196
|
+
return OnCallDutyPolicySchedule;
|
|
197
|
+
}, {
|
|
198
|
+
eager: false,
|
|
199
|
+
nullable: true,
|
|
200
|
+
onDelete: "CASCADE",
|
|
201
|
+
orphanedRowAction: "nullify",
|
|
202
|
+
}),
|
|
203
|
+
JoinColumn({ name: "onCallDutyPolicyScheduleId" }),
|
|
204
|
+
__metadata("design:type", OnCallDutyPolicySchedule)
|
|
205
|
+
], UserOnCallShiftReminderLog.prototype, "onCallDutyPolicySchedule", void 0);
|
|
206
|
+
__decorate([
|
|
207
|
+
ColumnAccessControl({
|
|
208
|
+
create: [],
|
|
209
|
+
read: [],
|
|
210
|
+
update: [],
|
|
211
|
+
}),
|
|
212
|
+
Index(),
|
|
213
|
+
TableColumn({
|
|
214
|
+
type: TableColumnType.ObjectID,
|
|
215
|
+
required: true,
|
|
216
|
+
canReadOnRelationQuery: true,
|
|
217
|
+
title: "On-Call Policy Schedule ID",
|
|
218
|
+
description: "ID of the schedule the reminded shift is on.",
|
|
219
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
220
|
+
}),
|
|
221
|
+
Column({
|
|
222
|
+
type: ColumnType.ObjectID,
|
|
223
|
+
nullable: false,
|
|
224
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
225
|
+
}),
|
|
226
|
+
__metadata("design:type", ObjectID)
|
|
227
|
+
], UserOnCallShiftReminderLog.prototype, "onCallDutyPolicyScheduleId", void 0);
|
|
228
|
+
__decorate([
|
|
229
|
+
ColumnAccessControl({
|
|
230
|
+
create: [],
|
|
231
|
+
read: [],
|
|
232
|
+
update: [],
|
|
233
|
+
}),
|
|
234
|
+
TableColumn({
|
|
235
|
+
required: true,
|
|
236
|
+
type: TableColumnType.Date,
|
|
237
|
+
title: "Shift Starts At",
|
|
238
|
+
description: "When the reminded shift starts (minute precision)",
|
|
239
|
+
example: "2024-01-15T18:00:00.000Z",
|
|
240
|
+
}),
|
|
241
|
+
Column({
|
|
242
|
+
type: ColumnType.Date,
|
|
243
|
+
nullable: false,
|
|
244
|
+
}),
|
|
245
|
+
__metadata("design:type", Date)
|
|
246
|
+
], UserOnCallShiftReminderLog.prototype, "shiftStartsAt", void 0);
|
|
247
|
+
__decorate([
|
|
248
|
+
ColumnAccessControl({
|
|
249
|
+
create: [],
|
|
250
|
+
read: [],
|
|
251
|
+
update: [],
|
|
252
|
+
}),
|
|
253
|
+
TableColumn({
|
|
254
|
+
required: true,
|
|
255
|
+
isDefaultValueColumn: true,
|
|
256
|
+
defaultValue: 0,
|
|
257
|
+
type: TableColumnType.Number,
|
|
258
|
+
title: "Minutes Before Shift",
|
|
259
|
+
description: "The lead time this reminder was sent for; 0 for change notices",
|
|
260
|
+
example: 60,
|
|
261
|
+
}),
|
|
262
|
+
Column({
|
|
263
|
+
type: ColumnType.Number,
|
|
264
|
+
nullable: false,
|
|
265
|
+
default: 0,
|
|
266
|
+
}),
|
|
267
|
+
__metadata("design:type", Number)
|
|
268
|
+
], UserOnCallShiftReminderLog.prototype, "minutesBeforeShift", void 0);
|
|
269
|
+
__decorate([
|
|
270
|
+
ColumnAccessControl({
|
|
271
|
+
create: [],
|
|
272
|
+
read: [],
|
|
273
|
+
update: [],
|
|
274
|
+
}),
|
|
275
|
+
TableColumn({
|
|
276
|
+
required: true,
|
|
277
|
+
type: TableColumnType.ShortText,
|
|
278
|
+
title: "Kind",
|
|
279
|
+
description: "reminder, catch-up or reassigned",
|
|
280
|
+
example: "reminder",
|
|
281
|
+
}),
|
|
282
|
+
Column({
|
|
283
|
+
type: ColumnType.ShortText,
|
|
284
|
+
length: ColumnLength.ShortText,
|
|
285
|
+
nullable: false,
|
|
286
|
+
}),
|
|
287
|
+
__metadata("design:type", String)
|
|
288
|
+
], UserOnCallShiftReminderLog.prototype, "kind", void 0);
|
|
289
|
+
__decorate([
|
|
290
|
+
ColumnAccessControl({
|
|
291
|
+
create: [],
|
|
292
|
+
read: [],
|
|
293
|
+
update: [],
|
|
294
|
+
}),
|
|
295
|
+
TableColumn({
|
|
296
|
+
required: true,
|
|
297
|
+
type: TableColumnType.Date,
|
|
298
|
+
title: "Claimed At",
|
|
299
|
+
description: "When a worker claimed this reminder for sending",
|
|
300
|
+
example: "2024-01-15T17:00:00.000Z",
|
|
301
|
+
}),
|
|
302
|
+
Index(),
|
|
303
|
+
Column({
|
|
304
|
+
type: ColumnType.Date,
|
|
305
|
+
nullable: false,
|
|
306
|
+
}),
|
|
307
|
+
__metadata("design:type", Date)
|
|
308
|
+
], UserOnCallShiftReminderLog.prototype, "claimedAt", void 0);
|
|
309
|
+
__decorate([
|
|
310
|
+
ColumnAccessControl({
|
|
311
|
+
create: [],
|
|
312
|
+
read: [],
|
|
313
|
+
update: [],
|
|
314
|
+
}),
|
|
315
|
+
TableColumn({
|
|
316
|
+
type: TableColumnType.Date,
|
|
317
|
+
title: "Sent At",
|
|
318
|
+
description: "When the reminder was actually sent; NULL while claimed",
|
|
319
|
+
example: "2024-01-15T17:00:02.000Z",
|
|
320
|
+
}),
|
|
321
|
+
Column({
|
|
322
|
+
type: ColumnType.Date,
|
|
323
|
+
nullable: true,
|
|
324
|
+
}),
|
|
325
|
+
__metadata("design:type", Date)
|
|
326
|
+
], UserOnCallShiftReminderLog.prototype, "sentAt", void 0);
|
|
327
|
+
UserOnCallShiftReminderLog = __decorate([
|
|
328
|
+
TenantColumn("projectId"),
|
|
329
|
+
TableAccessControl({
|
|
330
|
+
create: [],
|
|
331
|
+
read: [],
|
|
332
|
+
delete: [],
|
|
333
|
+
update: [],
|
|
334
|
+
}),
|
|
335
|
+
CrudApiEndpoint(new Route("/user-on-call-shift-reminder-log")),
|
|
336
|
+
Entity({
|
|
337
|
+
name: "UserOnCallShiftReminderLog",
|
|
338
|
+
}),
|
|
339
|
+
TableMetadata({
|
|
340
|
+
tableName: "UserOnCallShiftReminderLog",
|
|
341
|
+
singularName: "On-Call Shift Reminder Log",
|
|
342
|
+
pluralName: "On-Call Shift Reminder Logs",
|
|
343
|
+
icon: IconProp.Bell,
|
|
344
|
+
tableDescription: "Ledger of shift reminders claimed and sent, so each reminder is sent exactly once.",
|
|
345
|
+
}),
|
|
346
|
+
Index([
|
|
347
|
+
"userId",
|
|
348
|
+
"onCallDutyPolicyScheduleId",
|
|
349
|
+
"shiftStartsAt",
|
|
350
|
+
"minutesBeforeShift",
|
|
351
|
+
"kind",
|
|
352
|
+
], { unique: true })
|
|
353
|
+
], UserOnCallShiftReminderLog);
|
|
354
|
+
export default UserOnCallShiftReminderLog;
|
|
355
|
+
//# sourceMappingURL=UserOnCallShiftReminderLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOnCallShiftReminderLog.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/UserOnCallShiftReminderLog.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,SAAS,MAAM,uCAAuC,CAAC;AAC9D,OAAO,KAAK,MAAM,uBAAuB,CAAC;AAC1C,OAAO,mBAAmB,MAAM,wDAAwD,CAAC;AACzF,OAAO,kBAAkB,MAAM,uDAAuD,CAAC;AACvF,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,UAAU,MAAM,iCAAiC,CAAC;AACzD,OAAO,eAAe,MAAM,sCAAsC,CAAC;AACnE,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,eAAe,MAAM,sCAAsC,CAAC;AACnE,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,CAAN,IAAY,8BAIX;AAJD,WAAY,8BAA8B;IACxC,uDAAqB,CAAA;IACrB,sDAAoB,CAAA;IACpB,2DAAyB,CAAA;AAC3B,CAAC,EAJW,8BAA8B,KAA9B,8BAA8B,QAIzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AA8BY,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,SAAS;IAAlD;;QAyBN,YAAO,GAAa,SAAS,CAAC;QAqB9B,cAAS,GAAc,SAAS,CAAC;QA0BjC,SAAI,GAAU,SAAS,CAAC;QAqBxB,WAAM,GAAc,SAAS,CAAC;QA0B9B,6BAAwB,GAA8B,SAAS,CAAC;QAqBhE,+BAA0B,GAAc,SAAS,CAAC;QAEzD;;;;WAIG;QAiBI,kBAAa,GAAU,SAAS,CAAC;QAExC;;;WAGG;QAqBI,uBAAkB,GAAY,SAAS,CAAC;QAmBxC,SAAI,GAAoC,SAAS,CAAC;QAEzD;;;WAGG;QAkBI,cAAS,GAAU,SAAS,CAAC;QAiB7B,WAAM,GAAU,SAAS,CAAC;IACnC,CAAC;CAAA,CAAA;AAhOQ;IAxBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,uBAAuB,EAAE,WAAW;QACpC,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,2DAA2D;KACzE,CAAC;IACD,SAAS,CACR,GAAG,EAAE;QACH,OAAO,OAAO,CAAC;IACjB,CAAC,EACD;QACE,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,SAAS;QACnB,iBAAiB,EAAE,SAAS;KAC7B,CACF;IACA,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACjB,OAAO;2DAAa;AAqB9B;IAnBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,KAAK,EAAE;IACP,WAAW,CAAC;QACX,IAAI,EAAE,eAAe,CAAC,QAAQ;QAC9B,QAAQ,EAAE,IAAI;QACd,sBAAsB,EAAE,IAAI;QAC5B,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,OAAO,EAAE,sCAAsC;KAChD,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,QAAQ,CAAC,sBAAsB,EAAE;KAC/C,CAAC;8BACiB,QAAQ;6DAAa;AA0BjC;IAxBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,uBAAuB,EAAE,QAAQ;QACjC,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,4CAA4C;KAC1D,CAAC;IACD,SAAS,CACR,GAAG,EAAE;QACH,OAAO,IAAI,CAAC;IACd,CAAC,EACD;QACE,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,SAAS;QACnB,iBAAiB,EAAE,SAAS;KAC7B,CACF;IACA,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;8BACjB,IAAI;wDAAa;AAqBxB;IAnBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,KAAK,EAAE;IACP,WAAW,CAAC;QACX,IAAI,EAAE,eAAe,CAAC,QAAQ;QAC9B,QAAQ,EAAE,IAAI;QACd,sBAAsB,EAAE,IAAI;QAC5B,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,sCAAsC;KAChD,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,QAAQ,CAAC,sBAAsB,EAAE;KAC/C,CAAC;8BACc,QAAQ;0DAAa;AA0B9B;IAxBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,uBAAuB,EAAE,4BAA4B;QACrD,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,SAAS,EAAE,wBAAwB;QACnC,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,oDAAoD;KAClE,CAAC;IACD,SAAS,CACR,GAAG,EAAE;QACH,OAAO,wBAAwB,CAAC;IAClC,CAAC,EACD;QACE,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,SAAS;QACnB,iBAAiB,EAAE,SAAS;KAC7B,CACF;IACA,UAAU,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC;8BACjB,wBAAwB;4EAAa;AAqBhE;IAnBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,KAAK,EAAE;IACP,WAAW,CAAC;QACX,IAAI,EAAE,eAAe,CAAC,QAAQ;QAC9B,QAAQ,EAAE,IAAI;QACd,sBAAsB,EAAE,IAAI;QAC5B,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,8CAA8C;QAC3D,OAAO,EAAE,sCAAsC;KAChD,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,QAAQ,CAAC,sBAAsB,EAAE;KAC/C,CAAC;8BACkC,QAAQ;8EAAa;AAuBlD;IAhBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,0BAA0B;KACpC,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,KAAK;KAChB,CAAC;8BACqB,IAAI;iEAAa;AA0BjC;IApBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,QAAQ,EAAE,IAAI;QACd,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,gEAAgE;QAClE,OAAO,EAAE,EAAE;KACZ,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,MAAM;QACvB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,CAAC;KACX,CAAC;;sEAC6C;AAmBxC;IAjBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,eAAe,CAAC,SAAS;QAC/B,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,SAAS;QAC1B,MAAM,EAAE,YAAY,CAAC,SAAS;QAC9B,QAAQ,EAAE,KAAK;KAChB,CAAC;;wDACuD;AAuBlD;IAjBN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,0BAA0B;KACpC,CAAC;IACD,KAAK,EAAE;IACP,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,KAAK;KAChB,CAAC;8BACiB,IAAI;6DAAa;AAiB7B;IAfN,mBAAmB,CAAC;QACnB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACD,WAAW,CAAC;QACX,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,0BAA0B;KACpC,CAAC;IACD,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,IAAI;KACf,CAAC;8BACc,IAAI;0DAAa;AAxPd,0BAA0B;IA7B9C,YAAY,CAAC,WAAW,CAAC;IACzB,kBAAkB,CAAC;QAClB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;KACX,CAAC;IACD,eAAe,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9D,MAAM,CAAC;QACN,IAAI,EAAE,4BAA4B;KACnC,CAAC;IACD,aAAa,CAAC;QACb,SAAS,EAAE,4BAA4B;QACvC,YAAY,EAAE,4BAA4B;QAC1C,UAAU,EAAE,6BAA6B;QACzC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,gBAAgB,EACd,oFAAoF;KACvF,CAAC;IACD,KAAK,CACJ;QACE,QAAQ;QACR,4BAA4B;QAC5B,eAAe;QACf,oBAAoB;QACpB,MAAM;KACP,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB;GACoB,0BAA0B,CAyP9C;eAzPoB,0BAA0B"}
|