@oneuptime/common 7.0.3718 → 7.0.3815

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 (240) hide show
  1. package/Models/DatabaseModels/Alert.ts +3 -2
  2. package/Models/DatabaseModels/Incident.ts +3 -2
  3. package/Models/DatabaseModels/Index.ts +3 -0
  4. package/Models/DatabaseModels/ProjectUser.ts +335 -0
  5. package/Models/DatabaseModels/ScheduledMaintenance.ts +3 -2
  6. package/Server/API/SlackAPI.ts +127 -91
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.ts +17 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.ts +17 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.ts +17 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.ts +101 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  12. package/Server/Middleware/SlackAuthorization.ts +11 -2
  13. package/Server/Services/AccessTokenService.ts +21 -0
  14. package/Server/Services/AlertFeedService.ts +100 -2
  15. package/Server/Services/AlertInternalNoteService.ts +51 -10
  16. package/Server/Services/AlertOwnerTeamService.ts +52 -4
  17. package/Server/Services/AlertOwnerUserService.ts +54 -4
  18. package/Server/Services/AlertService.ts +295 -54
  19. package/Server/Services/AlertStateService.ts +24 -0
  20. package/Server/Services/AlertStateTimelineService.ts +38 -20
  21. package/Server/Services/IncidentFeedService.ts +101 -2
  22. package/Server/Services/IncidentInternalNoteService.ts +47 -4
  23. package/Server/Services/IncidentOwnerTeamService.ts +57 -4
  24. package/Server/Services/IncidentOwnerUserService.ts +59 -15
  25. package/Server/Services/IncidentPublicNoteService.ts +47 -7
  26. package/Server/Services/IncidentService.ts +279 -193
  27. package/Server/Services/IncidentStateService.ts +25 -0
  28. package/Server/Services/IncidentStateTimelineService.ts +38 -19
  29. package/Server/Services/MonitorStatusTimelineService.ts +7 -17
  30. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -0
  31. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +74 -7
  32. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +63 -4
  33. package/Server/Services/OnCallDutyPolicyService.ts +13 -0
  34. package/Server/Services/ProjectUserService.ts +130 -0
  35. package/Server/Services/ScheduledMaintenanceFeedService.ts +105 -2
  36. package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +61 -15
  37. package/Server/Services/ScheduledMaintenanceOwnerTeamService.ts +59 -18
  38. package/Server/Services/ScheduledMaintenanceOwnerUserService.ts +62 -30
  39. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +59 -15
  40. package/Server/Services/ScheduledMaintenanceService.ts +390 -21
  41. package/Server/Services/ScheduledMaintenanceStateService.ts +122 -34
  42. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +34 -2
  43. package/Server/Services/StatusPageSubscriberService.ts +3 -0
  44. package/Server/Services/TeamMemberService.ts +20 -0
  45. package/Server/Services/UserNotificationRuleService.ts +74 -0
  46. package/Server/Services/UserOnCallLogService.ts +1 -1
  47. package/Server/Services/UserService.ts +35 -0
  48. package/Server/Services/WorkspaceNotificationRuleService.ts +520 -149
  49. package/Server/Services/WorkspaceUserAuthTokenService.ts +23 -0
  50. package/Server/Utils/Express.ts +1 -1
  51. package/Server/Utils/StartServer.ts +6 -1
  52. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +38 -0
  53. package/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.ts +116 -0
  54. package/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.ts +116 -0
  55. package/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.ts +108 -0
  56. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +38 -0
  57. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +697 -0
  58. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +273 -0
  59. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +1123 -0
  60. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +956 -0
  61. package/Server/Utils/Workspace/Slack/Messages/Alert.ts +116 -0
  62. package/Server/Utils/Workspace/Slack/Messages/Incident.ts +116 -0
  63. package/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.ts +108 -0
  64. package/Server/Utils/Workspace/Slack/Slack.ts +601 -18
  65. package/Server/Utils/Workspace/Slack/app-manifest.json +19 -11
  66. package/Server/Utils/Workspace/Workspace.ts +194 -1
  67. package/Server/Utils/Workspace/WorkspaceBase.ts +159 -19
  68. package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +69 -0
  69. package/Server/Utils/Workspace/WorkspaceMessages/Incident.ts +68 -0
  70. package/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.ts +73 -0
  71. package/Types/Date.ts +5 -0
  72. package/Types/Icon/IconProp.ts +1 -0
  73. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +2 -1
  74. package/Types/Workspace/NotificationRules/NotificationRuleUtil.ts +251 -121
  75. package/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.ts +6 -0
  76. package/Types/Workspace/WorkspaceMessagePayload.ts +80 -2
  77. package/UI/Components/ComingSoon/ComingSoon.tsx +13 -3
  78. package/UI/Components/Forms/Fields/FormField.tsx +2 -2
  79. package/UI/Components/Icon/Icon.tsx +39 -2
  80. package/UI/Components/ModelTable/BaseModelTable.tsx +16 -0
  81. package/UI/Components/Radio/Radio.tsx +11 -2
  82. package/UI/Components/Table/TableCard.tsx +2 -2
  83. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  84. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  85. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  86. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  87. package/build/dist/Models/DatabaseModels/ProjectUser.js +340 -0
  88. package/build/dist/Models/DatabaseModels/ProjectUser.js.map +1 -0
  89. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  90. package/build/dist/Server/API/SlackAPI.js +93 -79
  91. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  92. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js +12 -0
  93. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js.map +1 -0
  94. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js +12 -0
  95. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js.map +1 -0
  96. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js +12 -0
  97. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js.map +1 -0
  98. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js +42 -0
  99. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js.map +1 -0
  100. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  101. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  102. package/build/dist/Server/Middleware/SlackAuthorization.js +8 -2
  103. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  104. package/build/dist/Server/Services/AccessTokenService.js +11 -0
  105. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  106. package/build/dist/Server/Services/AlertFeedService.js +62 -2
  107. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  108. package/build/dist/Server/Services/AlertInternalNoteService.js +41 -10
  109. package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
  110. package/build/dist/Server/Services/AlertOwnerTeamService.js +42 -4
  111. package/build/dist/Server/Services/AlertOwnerTeamService.js.map +1 -1
  112. package/build/dist/Server/Services/AlertOwnerUserService.js +43 -5
  113. package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
  114. package/build/dist/Server/Services/AlertService.js +233 -51
  115. package/build/dist/Server/Services/AlertService.js.map +1 -1
  116. package/build/dist/Server/Services/AlertStateService.js +13 -0
  117. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  118. package/build/dist/Server/Services/AlertStateTimelineService.js +32 -18
  119. package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
  120. package/build/dist/Server/Services/IncidentFeedService.js +62 -2
  121. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  122. package/build/dist/Server/Services/IncidentInternalNoteService.js +35 -4
  123. package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
  124. package/build/dist/Server/Services/IncidentOwnerTeamService.js +42 -4
  125. package/build/dist/Server/Services/IncidentOwnerTeamService.js.map +1 -1
  126. package/build/dist/Server/Services/IncidentOwnerUserService.js +43 -15
  127. package/build/dist/Server/Services/IncidentOwnerUserService.js.map +1 -1
  128. package/build/dist/Server/Services/IncidentPublicNoteService.js +36 -7
  129. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  130. package/build/dist/Server/Services/IncidentService.js +221 -170
  131. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  132. package/build/dist/Server/Services/IncidentStateService.js +14 -0
  133. package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
  134. package/build/dist/Server/Services/IncidentStateTimelineService.js +31 -17
  135. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  136. package/build/dist/Server/Services/MonitorStatusTimelineService.js +5 -15
  137. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  138. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +1 -0
  139. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  140. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +62 -7
  141. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  142. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -5
  143. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  144. package/build/dist/Server/Services/OnCallDutyPolicyService.js +6 -0
  145. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  146. package/build/dist/Server/Services/ProjectUserService.js +106 -0
  147. package/build/dist/Server/Services/ProjectUserService.js.map +1 -0
  148. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +62 -2
  149. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
  150. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +38 -8
  151. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
  152. package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js +28 -4
  153. package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js.map +1 -1
  154. package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js +30 -16
  155. package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js.map +1 -1
  156. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +38 -9
  157. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  158. package/build/dist/Server/Services/ScheduledMaintenanceService.js +279 -14
  159. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  160. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +52 -4
  161. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  162. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +29 -2
  163. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  164. package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
  165. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  166. package/build/dist/Server/Services/TeamMemberService.js +17 -0
  167. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  168. package/build/dist/Server/Services/UserNotificationRuleService.js +52 -0
  169. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  170. package/build/dist/Server/Services/UserOnCallLogService.js +1 -1
  171. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  172. package/build/dist/Server/Services/UserService.js +23 -0
  173. package/build/dist/Server/Services/UserService.js.map +1 -1
  174. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +316 -84
  175. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  176. package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js +18 -0
  177. package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js.map +1 -1
  178. package/build/dist/Server/Utils/StartServer.js +4 -0
  179. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  180. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +37 -0
  181. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -0
  182. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js +82 -0
  183. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js.map +1 -0
  184. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js +82 -0
  185. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js.map +1 -0
  186. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js +74 -0
  187. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js.map +1 -0
  188. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +37 -0
  189. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -0
  190. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +425 -0
  191. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -0
  192. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +169 -0
  193. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -0
  194. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +730 -0
  195. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -0
  196. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +599 -0
  197. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -0
  198. package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js +82 -0
  199. package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js.map +1 -0
  200. package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js +82 -0
  201. package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js.map +1 -0
  202. package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js +74 -0
  203. package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js.map +1 -0
  204. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +431 -14
  205. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  206. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +19 -11
  207. package/build/dist/Server/Utils/Workspace/Workspace.js +126 -0
  208. package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
  209. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +77 -11
  210. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  211. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js +48 -0
  212. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -0
  213. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js +47 -0
  214. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js.map +1 -0
  215. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js +47 -0
  216. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js.map +1 -0
  217. package/build/dist/Types/Date.js +4 -0
  218. package/build/dist/Types/Date.js.map +1 -1
  219. package/build/dist/Types/Icon/IconProp.js +1 -0
  220. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  221. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +2 -1
  222. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  223. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js +214 -120
  224. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js.map +1 -1
  225. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js +2 -0
  226. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js.map +1 -0
  227. package/build/dist/UI/Components/ComingSoon/ComingSoon.js +3 -2
  228. package/build/dist/UI/Components/ComingSoon/ComingSoon.js.map +1 -1
  229. package/build/dist/UI/Components/Forms/Fields/FormField.js +2 -2
  230. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  231. package/build/dist/UI/Components/Icon/Icon.js +19 -2
  232. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  233. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +11 -0
  234. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  235. package/build/dist/UI/Components/Radio/Radio.js +5 -2
  236. package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
  237. package/build/dist/UI/Components/Table/TableCard.js +2 -2
  238. package/build/dist/UI/Components/Table/TableCard.js.map +1 -1
  239. package/package.json +3 -2
  240. package/Server/Utils/Workspace/Slack/app-manifest.example.json +0 -198
@@ -6,12 +6,34 @@ import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
6
6
  import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/ScheduledMaintenanceFeed";
7
7
  import { Blue500 } from "../../Types/BrandColors";
8
8
  import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
9
+ import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
10
+ import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
9
11
 
10
12
  export class Service extends DatabaseService<Model> {
11
13
  public constructor() {
12
14
  super(Model);
13
15
  }
14
16
 
17
+ public async addNote(data: {
18
+ userId: ObjectID;
19
+ scheduledMaintenanceId: ObjectID;
20
+ projectId: ObjectID;
21
+ note: string;
22
+ }): Promise<Model> {
23
+ const internalNote: Model = new Model();
24
+ internalNote.createdByUserId = data.userId;
25
+ internalNote.scheduledMaintenanceId = data.scheduledMaintenanceId;
26
+ internalNote.projectId = data.projectId;
27
+ internalNote.note = data.note;
28
+
29
+ return this.create({
30
+ data: internalNote,
31
+ props: {
32
+ isRoot: true,
33
+ },
34
+ });
35
+ }
36
+
15
37
  public override async onCreateSuccess(
16
38
  _onCreate: OnCreate<Model>,
17
39
  createdItem: Model,
@@ -19,7 +41,15 @@ export class Service extends DatabaseService<Model> {
19
41
  const userId: ObjectID | null | undefined =
20
42
  createdItem.createdByUserId || createdItem.createdByUser?.id;
21
43
 
22
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
44
+ const scheduledMaintenanceId: ObjectID =
45
+ createdItem.scheduledMaintenanceId!;
46
+
47
+ const scheduledMaintenanceNumber: number | null =
48
+ await ScheduledMaintenanceService.getScheduledMaintenanceNumber({
49
+ scheduledMaintenanceId: scheduledMaintenanceId,
50
+ });
51
+
52
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
23
53
  scheduledMaintenanceId: createdItem.scheduledMaintenanceId!,
24
54
  projectId: createdItem.projectId!,
25
55
  scheduledMaintenanceFeedEventType:
@@ -27,10 +57,14 @@ export class Service extends DatabaseService<Model> {
27
57
  displayColor: Blue500,
28
58
  userId: userId || undefined,
29
59
 
30
- feedInfoInMarkdown: `**Posted Internal / Private Note**
31
-
60
+ feedInfoInMarkdown: `📄 posted **private note** for this [Scheduled Maintenance ${scheduledMaintenanceNumber}](${(await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(createdItem.projectId!, scheduledMaintenanceId)).toString()}):
61
+
32
62
  ${createdItem.note}
33
- `,
63
+ `,
64
+ workspaceNotification: {
65
+ sendWorkspaceNotification: true,
66
+ notifyUserId: userId || undefined,
67
+ },
34
68
  });
35
69
 
36
70
  return createdItem;
@@ -56,6 +90,9 @@ ${createdItem.note}
56
90
  createdByUser: {
57
91
  _id: true,
58
92
  },
93
+ scheduledMaintenance: {
94
+ scheduledMaintenanceNumber: true,
95
+ },
59
96
  },
60
97
  });
61
98
 
@@ -63,19 +100,28 @@ ${createdItem.note}
63
100
  onUpdate.updateBy.props.userId;
64
101
 
65
102
  for (const updatedItem of updatedItems) {
66
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
67
- scheduledMaintenanceId: updatedItem.scheduledMaintenanceId!,
68
- projectId: updatedItem.projectId!,
69
- scheduledMaintenanceFeedEventType:
70
- ScheduledMaintenanceFeedEventType.PrivateNote,
71
- displayColor: Blue500,
72
- userId: userId || undefined,
103
+ const scheduledMaintenance: ScheduledMaintenance =
104
+ updatedItem.scheduledMaintenance!;
73
105
 
74
- feedInfoInMarkdown: `**Updated Private Note**
75
-
106
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
107
+ {
108
+ scheduledMaintenanceId: updatedItem.scheduledMaintenanceId!,
109
+ projectId: updatedItem.projectId!,
110
+ scheduledMaintenanceFeedEventType:
111
+ ScheduledMaintenanceFeedEventType.PrivateNote,
112
+ displayColor: Blue500,
113
+ userId: userId || undefined,
114
+
115
+ feedInfoInMarkdown: `📄 updated **Private Note** for this [Scheduled Maintenance ${scheduledMaintenance.scheduledMaintenanceNumber}](${(await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(scheduledMaintenance.projectId!, scheduledMaintenance.id!)).toString()})
116
+
76
117
  ${updatedItem.note}
77
- `,
78
- });
118
+ `,
119
+ workspaceNotification: {
120
+ sendWorkspaceNotification: true,
121
+ notifyUserId: userId || undefined,
122
+ },
123
+ },
124
+ );
79
125
  }
80
126
  }
81
127
  return onUpdate;
@@ -8,6 +8,11 @@ import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/S
8
8
  import { Gray500, Red500 } from "../../Types/BrandColors";
9
9
  import { OnCreate, OnDelete } from "../Types/Database/Hooks";
10
10
  import DeleteBy from "../Types/Database/DeleteBy";
11
+ import NotificationRuleEventType from "../../Types/Workspace/NotificationRules/EventType";
12
+ import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
13
+ import WorkspaceNotificationRule from "../../Models/DatabaseModels/WorkspaceNotificationRule";
14
+ import logger from "../Utils/Logger";
15
+ import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
11
16
 
12
17
  export class Service extends DatabaseService<Model> {
13
18
  public constructor() {
@@ -66,15 +71,17 @@ export class Service extends DatabaseService<Model> {
66
71
  });
67
72
 
68
73
  if (team && team.name) {
69
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
70
- scheduledMaintenanceId: scheduledMaintenanceId,
71
- projectId: projectId,
72
- scheduledMaintenanceFeedEventType:
73
- ScheduledMaintenanceFeedEventType.OwnerTeamRemoved,
74
- displayColor: Red500,
75
- feedInfoInMarkdown: `**Team ${team.name}** was removed from the scheduled maintenance as the owner.`,
76
- userId: deleteByUserId || undefined,
77
- });
74
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
75
+ {
76
+ scheduledMaintenanceId: scheduledMaintenanceId,
77
+ projectId: projectId,
78
+ scheduledMaintenanceFeedEventType:
79
+ ScheduledMaintenanceFeedEventType.OwnerTeamRemoved,
80
+ displayColor: Red500,
81
+ feedInfoInMarkdown: `Removed team **${team.name}** from the scheduled maintenance as the owner.`,
82
+ userId: deleteByUserId || undefined,
83
+ },
84
+ );
78
85
  }
79
86
  }
80
87
  }
@@ -107,18 +114,52 @@ export class Service extends DatabaseService<Model> {
107
114
  });
108
115
 
109
116
  if (team && team.name) {
110
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
111
- scheduledMaintenanceId: scheduledMaintenanceId,
112
- projectId: projectId,
113
- scheduledMaintenanceFeedEventType:
114
- ScheduledMaintenanceFeedEventType.OwnerTeamAdded,
115
- displayColor: Gray500,
116
- feedInfoInMarkdown: `**Team ${team.name}** was added to the scheduled maintenance as the owner.`,
117
- userId: createdByUserId || undefined,
118
- });
117
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
118
+ {
119
+ scheduledMaintenanceId: scheduledMaintenanceId,
120
+ projectId: projectId,
121
+ scheduledMaintenanceFeedEventType:
122
+ ScheduledMaintenanceFeedEventType.OwnerTeamAdded,
123
+ displayColor: Gray500,
124
+ feedInfoInMarkdown: `Added team **${team.name}** to the scheduled maintenance as the owner.`,
125
+ userId: createdByUserId || undefined,
126
+ },
127
+ );
119
128
  }
120
129
  }
121
130
 
131
+ // get notification rule where inviteOwners is true.
132
+ const notificationRules: Array<WorkspaceNotificationRule> =
133
+ await WorkspaceNotificationRuleService.getNotificationRulesWhereInviteOwnersIsTrue(
134
+ {
135
+ projectId: projectId!,
136
+ notificationFor: {
137
+ scheduledMaintenanceId: scheduledMaintenanceId,
138
+ },
139
+ notificationRuleEventType:
140
+ NotificationRuleEventType.ScheduledMaintenance,
141
+ },
142
+ );
143
+
144
+ logger.debug(`Notification Rules for ScheduledMaintenance Owner Teams`);
145
+ logger.debug(notificationRules);
146
+
147
+ WorkspaceNotificationRuleService.inviteTeamsBasedOnRulesAndWorkspaceChannels(
148
+ {
149
+ notificationRules: notificationRules,
150
+ projectId: projectId!,
151
+ workspaceChannels:
152
+ await ScheduledMaintenanceService.getWorkspaceChannelForScheduledMaintenance(
153
+ {
154
+ scheduledMaintenanceId: scheduledMaintenanceId!,
155
+ },
156
+ ),
157
+ teamIds: [teamId!],
158
+ },
159
+ ).catch((error: Error) => {
160
+ logger.error(error);
161
+ });
162
+
122
163
  return createdItem;
123
164
  }
124
165
  }
@@ -8,6 +8,11 @@ import UserService from "./UserService";
8
8
  import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
9
9
  import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/ScheduledMaintenanceFeed";
10
10
  import { Gray500, Red500 } from "../../Types/BrandColors";
11
+ import WorkspaceNotificationRule from "../../Models/DatabaseModels/WorkspaceNotificationRule";
12
+ import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
13
+ import NotificationRuleEventType from "../../Types/Workspace/NotificationRules/EventType";
14
+ import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
15
+ import logger from "../Utils/Logger";
11
16
 
12
17
  export class Service extends DatabaseService<Model> {
13
18
  public constructor() {
@@ -67,15 +72,17 @@ export class Service extends DatabaseService<Model> {
67
72
  });
68
73
 
69
74
  if (user && user.name) {
70
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
71
- scheduledMaintenanceId: scheduledMaintenanceId,
72
- projectId: projectId,
73
- scheduledMaintenanceFeedEventType:
74
- ScheduledMaintenanceFeedEventType.OwnerUserRemoved,
75
- displayColor: Red500,
76
- feedInfoInMarkdown: `**${user.name.toString()}** (${user.email?.toString()}) was removed from the scheduled maintenance as the owner.`,
77
- userId: deleteByUserId || undefined,
78
- });
75
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
76
+ {
77
+ scheduledMaintenanceId: scheduledMaintenanceId,
78
+ projectId: projectId,
79
+ scheduledMaintenanceFeedEventType:
80
+ ScheduledMaintenanceFeedEventType.OwnerUserRemoved,
81
+ displayColor: Red500,
82
+ feedInfoInMarkdown: `Removed **${user.name.toString()}** (${user.email?.toString()}) from the scheduled maintenance as the owner.`,
83
+ userId: deleteByUserId || undefined,
84
+ },
85
+ );
79
86
  }
80
87
  }
81
88
  }
@@ -97,30 +104,55 @@ export class Service extends DatabaseService<Model> {
97
104
  createdItem.createdByUserId || onCreate.createBy.props.userId;
98
105
 
99
106
  if (scheduledMaintenanceId && userId && projectId) {
100
- const user: User | null = await UserService.findOneById({
101
- id: userId,
102
- select: {
103
- name: true,
104
- email: true,
105
- },
106
- props: {
107
- isRoot: true,
108
- },
109
- });
110
-
111
- if (user && user.name) {
112
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
113
- scheduledMaintenanceId: scheduledMaintenanceId,
114
- projectId: projectId,
115
- scheduledMaintenanceFeedEventType:
116
- ScheduledMaintenanceFeedEventType.OwnerUserAdded,
117
- displayColor: Gray500,
118
- feedInfoInMarkdown: `**${user.name.toString()}** (${user.email?.toString()}) was added to the scheduled maintenance as the owner.`,
119
- userId: createdByUserId || undefined,
120
- });
107
+ if (userId) {
108
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
109
+ {
110
+ scheduledMaintenanceId: scheduledMaintenanceId,
111
+ projectId: projectId,
112
+ scheduledMaintenanceFeedEventType:
113
+ ScheduledMaintenanceFeedEventType.OwnerUserAdded,
114
+ displayColor: Gray500,
115
+ feedInfoInMarkdown: `Added **${await UserService.getUserMarkdownString(
116
+ {
117
+ userId: userId,
118
+ projectId: projectId,
119
+ },
120
+ )}** to the scheduled maintenance as the owner.`,
121
+ userId: createdByUserId || undefined,
122
+ },
123
+ );
121
124
  }
122
125
  }
123
126
 
127
+ // get notification rule where inviteOwners is true.
128
+ const notificationRules: Array<WorkspaceNotificationRule> =
129
+ await WorkspaceNotificationRuleService.getNotificationRulesWhereInviteOwnersIsTrue(
130
+ {
131
+ projectId: projectId!,
132
+ notificationFor: {
133
+ scheduledMaintenanceId: scheduledMaintenanceId,
134
+ },
135
+ notificationRuleEventType:
136
+ NotificationRuleEventType.ScheduledMaintenance,
137
+ },
138
+ );
139
+
140
+ WorkspaceNotificationRuleService.inviteUsersBasedOnRulesAndWorkspaceChannels(
141
+ {
142
+ notificationRules: notificationRules,
143
+ projectId: projectId!,
144
+ workspaceChannels:
145
+ await ScheduledMaintenanceService.getWorkspaceChannelForScheduledMaintenance(
146
+ {
147
+ scheduledMaintenanceId: scheduledMaintenanceId!,
148
+ },
149
+ ),
150
+ userIds: [userId!],
151
+ },
152
+ ).catch((error: Error) => {
153
+ logger.error(error);
154
+ });
155
+
124
156
  return createdItem;
125
157
  }
126
158
  }
@@ -8,6 +8,8 @@ import ObjectID from "../../Types/ObjectID";
8
8
  import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/ScheduledMaintenanceFeed";
9
9
  import { Blue500, Indigo500 } from "../../Types/BrandColors";
10
10
  import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
11
+ import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
12
+ import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
11
13
 
12
14
  export class Service extends DatabaseService<Model> {
13
15
  public constructor() {
@@ -34,17 +36,29 @@ export class Service extends DatabaseService<Model> {
34
36
  const userId: ObjectID | null | undefined =
35
37
  createdItem.createdByUserId || createdItem.createdByUser?.id;
36
38
 
37
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
39
+ const scheduledMaintenanceId: ObjectID =
40
+ createdItem.scheduledMaintenanceId!;
41
+ const projectId: ObjectID = createdItem.projectId!;
42
+ const scheduledMaintenanceNumber: number | null =
43
+ await ScheduledMaintenanceService.getScheduledMaintenanceNumber({
44
+ scheduledMaintenanceId: scheduledMaintenanceId,
45
+ });
46
+
47
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
38
48
  scheduledMaintenanceId: createdItem.scheduledMaintenanceId!,
39
49
  projectId: createdItem.projectId!,
40
50
  scheduledMaintenanceFeedEventType:
41
51
  ScheduledMaintenanceFeedEventType.PublicNote,
42
52
  displayColor: Indigo500,
43
53
  userId: userId || undefined,
44
- feedInfoInMarkdown: `**Posted public note for this scheduled maintenance on status page**
45
-
54
+ feedInfoInMarkdown: `📄 posted **public note** for this [Scheduled Maintenance ${scheduledMaintenanceNumber}](${(await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(projectId!, scheduledMaintenanceId!)).toString()}) on status page:
55
+
46
56
  ${createdItem.note}
47
- `,
57
+ `,
58
+ workspaceNotification: {
59
+ sendWorkspaceNotification: true,
60
+ notifyUserId: userId || undefined,
61
+ },
48
62
  });
49
63
 
50
64
  return createdItem;
@@ -77,23 +91,53 @@ ${createdItem.note}
77
91
  onUpdate.updateBy.props.userId;
78
92
 
79
93
  for (const updatedItem of updatedItems) {
80
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
81
- scheduledMaintenanceId: updatedItem.scheduledMaintenanceId!,
82
- projectId: updatedItem.projectId!,
83
- scheduledMaintenanceFeedEventType:
84
- ScheduledMaintenanceFeedEventType.PublicNote,
85
- displayColor: Blue500,
86
- userId: userId || undefined,
94
+ const scheduledMaintenance: ScheduledMaintenance =
95
+ updatedItem.scheduledMaintenance!;
87
96
 
88
- feedInfoInMarkdown: `**Updated Public Note**
89
-
97
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
98
+ {
99
+ scheduledMaintenanceId: updatedItem.scheduledMaintenanceId!,
100
+ projectId: updatedItem.projectId!,
101
+ scheduledMaintenanceFeedEventType:
102
+ ScheduledMaintenanceFeedEventType.PrivateNote,
103
+ displayColor: Blue500,
104
+ userId: userId || undefined,
105
+
106
+ feedInfoInMarkdown: `📄 updated **Public Note** for this [Scheduled Maintenance ${scheduledMaintenance.scheduledMaintenanceNumber}](${(await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(scheduledMaintenance.projectId!, scheduledMaintenance.id!)).toString()})
107
+
90
108
  ${updatedItem.note}
91
- `,
92
- });
109
+ `,
110
+ workspaceNotification: {
111
+ sendWorkspaceNotification: true,
112
+ notifyUserId: userId || undefined,
113
+ },
114
+ },
115
+ );
93
116
  }
94
117
  }
95
118
  return onUpdate;
96
119
  }
120
+
121
+ public async addNote(data: {
122
+ userId: ObjectID;
123
+ scheduledMaintenanceId: ObjectID;
124
+ projectId: ObjectID;
125
+ note: string;
126
+ }): Promise<Model> {
127
+ const publicNote: Model = new Model();
128
+ publicNote.createdByUserId = data.userId;
129
+ publicNote.scheduledMaintenanceId = data.scheduledMaintenanceId;
130
+ publicNote.projectId = data.projectId;
131
+ publicNote.note = data.note;
132
+ publicNote.postedAt = OneUptimeDate.getCurrentDate();
133
+
134
+ return this.create({
135
+ data: publicNote,
136
+ props: {
137
+ isRoot: true,
138
+ },
139
+ });
140
+ }
97
141
  }
98
142
 
99
143
  export default new Service();