easywork-common-lib 1.0.343 → 1.0.344
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/dist/common/enums/notification.enum.d.ts +1 -1
- package/dist/common/enums/notification.enum.js +1 -1
- package/dist/modules/queue/notifiers/task.notifier.d.ts +3 -0
- package/dist/modules/queue/notifiers/task.notifier.js +68 -111
- package/dist/modules/queue/notifiers/task.notifier.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -9,7 +9,7 @@ export declare enum NotificationSubcategory {
|
|
|
9
9
|
TASK_COMPLETED = "task-complete",
|
|
10
10
|
TASK_OVERDUE = "task-overdue",
|
|
11
11
|
TASK_REMINDER = "task-reminder",
|
|
12
|
-
|
|
12
|
+
TASK_NEW_COMMENT = "task-new-comment",
|
|
13
13
|
TASK_APPROVED = "task-approved",
|
|
14
14
|
TASK_REJECTED = "task-rejected",
|
|
15
15
|
TASK_UPDATED = "task-updated",
|
|
@@ -14,7 +14,7 @@ var NotificationSubcategory;
|
|
|
14
14
|
NotificationSubcategory["TASK_COMPLETED"] = "task-complete";
|
|
15
15
|
NotificationSubcategory["TASK_OVERDUE"] = "task-overdue";
|
|
16
16
|
NotificationSubcategory["TASK_REMINDER"] = "task-reminder";
|
|
17
|
-
NotificationSubcategory["
|
|
17
|
+
NotificationSubcategory["TASK_NEW_COMMENT"] = "task-new-comment";
|
|
18
18
|
NotificationSubcategory["TASK_APPROVED"] = "task-approved";
|
|
19
19
|
NotificationSubcategory["TASK_REJECTED"] = "task-rejected";
|
|
20
20
|
NotificationSubcategory["TASK_UPDATED"] = "task-updated";
|
|
@@ -3,6 +3,9 @@ import { Task, TaskComment } from '../../../entities';
|
|
|
3
3
|
export declare class TaskNotifier {
|
|
4
4
|
private readonly notifierService;
|
|
5
5
|
constructor(notifierService: EasyNotifierService);
|
|
6
|
+
private getMetadata;
|
|
7
|
+
private createNotificationDto;
|
|
8
|
+
private buildTaskLink;
|
|
6
9
|
notifyTaskCompletion(task: Task, recipientsId: string[]): Promise<void>;
|
|
7
10
|
notifyTaskOverdue(task: Task, recipientsId: string[]): Promise<void>;
|
|
8
11
|
notifyTaskContinue(task: Task, recipientsId: string[]): Promise<void>;
|
|
@@ -18,150 +18,107 @@ let TaskNotifier = class TaskNotifier {
|
|
|
18
18
|
constructor(notifierService) {
|
|
19
19
|
this.notifierService = notifierService;
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
getMetadata(task, additionalData) {
|
|
22
|
+
return {
|
|
23
23
|
taskId: task.id,
|
|
24
|
-
taskOwnerId: task.createdBy
|
|
25
|
-
taskResponsibleId: task.responsible[0]
|
|
24
|
+
taskOwnerId: task.createdBy?.id ?? null,
|
|
25
|
+
taskResponsibleId: task.responsible?.[0]?.id ?? null,
|
|
26
|
+
...(additionalData ?? {}),
|
|
26
27
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
}
|
|
29
|
+
createNotificationDto(title, content, recipientsId, task, channels, subCategory, metadata) {
|
|
30
|
+
return {
|
|
31
|
+
title,
|
|
32
|
+
content,
|
|
30
33
|
recipientsId,
|
|
31
34
|
entityId: task.id,
|
|
32
|
-
channels
|
|
35
|
+
channels,
|
|
33
36
|
category: common_2.NotificationCategory.TASK,
|
|
34
|
-
subCategory
|
|
35
|
-
metadata,
|
|
37
|
+
subCategory,
|
|
38
|
+
metadata: this.getMetadata(task, metadata),
|
|
36
39
|
};
|
|
40
|
+
}
|
|
41
|
+
buildTaskLink(task, color = 'blue') {
|
|
42
|
+
return `<a href="/tools/tasks/task/${task.id}?show=true" style="color:${color}">[${task.name}]</a>`;
|
|
43
|
+
}
|
|
44
|
+
async notifyTaskCompletion(task, recipientsId) {
|
|
45
|
+
const content = `La tarea ${task.name} ha sido completada`;
|
|
46
|
+
const notificationDto = this.createNotificationDto('Tarea Completada', content, recipientsId, task, [common_2.NotificationChannel.APP], common_2.NotificationSubcategory.TASK_COMPLETED);
|
|
37
47
|
await this.notifierService.sendNotification(notificationDto);
|
|
38
48
|
}
|
|
39
49
|
async notifyTaskOverdue(task, recipientsId) {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
taskOwnerId: task.createdBy.id,
|
|
43
|
-
taskResponsibleId: task.responsible[0].id,
|
|
44
|
-
};
|
|
45
|
-
const notificationDto = {
|
|
46
|
-
title: "Task Overdue",
|
|
47
|
-
content: `La tarea [#${task.number}] - ${task.name} está atrasada`,
|
|
48
|
-
recipientsId,
|
|
49
|
-
entityId: task.id,
|
|
50
|
-
channels: [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH],
|
|
51
|
-
category: common_2.NotificationCategory.TASK,
|
|
52
|
-
subCategory: common_2.NotificationSubcategory.TASK_OVERDUE,
|
|
53
|
-
metadata,
|
|
54
|
-
};
|
|
50
|
+
const content = `La tarea [#${task.number}] - ${task.name} está atrasada`;
|
|
51
|
+
const notificationDto = this.createNotificationDto('Tarea Atrasada', content, recipientsId, task, [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH], common_2.NotificationSubcategory.TASK_OVERDUE);
|
|
55
52
|
await this.notifierService.sendNotification(notificationDto);
|
|
56
53
|
}
|
|
57
54
|
async notifyTaskContinue(task, recipientsId) {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
taskOwnerId: task.createdBy.id,
|
|
61
|
-
taskResponsibleId: task.responsible[0].id,
|
|
62
|
-
};
|
|
63
|
-
const notificationDto = {
|
|
64
|
-
title: "Task Continue",
|
|
65
|
-
content: `La tarea #${task.number} - ${task.name}, ha sido reanudada`,
|
|
66
|
-
recipientsId,
|
|
67
|
-
entityId: task.id,
|
|
68
|
-
channels: [common_2.NotificationChannel.APP],
|
|
69
|
-
category: common_2.NotificationCategory.TASK,
|
|
70
|
-
subCategory: common_2.NotificationSubcategory.TASK_UPDATED,
|
|
71
|
-
metadata,
|
|
72
|
-
};
|
|
55
|
+
const content = `La tarea #${task.number} - ${task.name} ha sido reanudada`;
|
|
56
|
+
const notificationDto = this.createNotificationDto('Tarea Reanudada', content, recipientsId, task, [common_2.NotificationChannel.APP], common_2.NotificationSubcategory.TASK_UPDATED);
|
|
73
57
|
await this.notifierService.sendNotification(notificationDto);
|
|
74
58
|
}
|
|
75
59
|
async notifyNewTask(task, recipientsId) {
|
|
76
|
-
const fechaLimite = task.deadline
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
channels: [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH],
|
|
92
|
-
category: common_2.NotificationCategory.TASK,
|
|
93
|
-
subCategory: common_2.NotificationSubcategory.NEW_TASK,
|
|
94
|
-
metadata,
|
|
95
|
-
};
|
|
60
|
+
const fechaLimite = task.deadline
|
|
61
|
+
? `<br/>Fecha Límite: ${new Date(task.deadline).toLocaleDateString()}`
|
|
62
|
+
: '';
|
|
63
|
+
const observadores = task.observers?.length > 0
|
|
64
|
+
? `<br/>Observadores: ${task.observers.map((o) => o.username).join(', ')}`
|
|
65
|
+
: '';
|
|
66
|
+
const responsables = task.responsible?.length > 0
|
|
67
|
+
? `<br/>Responsables: ${task.responsible.map((r) => r.username).join(', ')}`
|
|
68
|
+
: '';
|
|
69
|
+
const participantes = task.participants?.length > 0
|
|
70
|
+
? `<br/>Participantes: ${task.participants.map((p) => p.username).join(', ')}`
|
|
71
|
+
: '';
|
|
72
|
+
const taskLink = this.buildTaskLink(task);
|
|
73
|
+
const content = `Nueva tarea agregada: ${taskLink}${responsables}${observadores}${participantes}${fechaLimite}`;
|
|
74
|
+
const notificationDto = this.createNotificationDto('Nueva Tarea', content, recipientsId, task, [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH], common_2.NotificationSubcategory.NEW_TASK);
|
|
96
75
|
await this.notifierService.sendNotification(notificationDto);
|
|
97
76
|
}
|
|
98
77
|
async notifyTaskUpdate(task, recipientsId, changedFields) {
|
|
99
|
-
const
|
|
100
|
-
taskId: task.id,
|
|
101
|
-
taskOwnerId: task.createdBy.id,
|
|
102
|
-
taskResponsibleId: task.responsible[0].id,
|
|
103
|
-
};
|
|
104
|
-
const createNotificationDto = (content, recipients) => ({
|
|
105
|
-
title: "Task Update",
|
|
106
|
-
content,
|
|
107
|
-
recipientsId: recipients,
|
|
108
|
-
entityId: task.id,
|
|
109
|
-
channels: [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH],
|
|
110
|
-
category: common_2.NotificationCategory.TASK,
|
|
111
|
-
subCategory: common_2.NotificationSubcategory.TASK_UPDATED,
|
|
112
|
-
metadata,
|
|
113
|
-
});
|
|
114
|
-
const taskLink = `<a href="/tools/tasks/task/${task.id}?show=true" style="color:blue">[${task.name}]</a>`;
|
|
78
|
+
const taskLink = this.buildTaskLink(task);
|
|
115
79
|
let content = `Tarea #${task.number} - ${taskLink}`;
|
|
116
80
|
if (changedFields.length === 0) {
|
|
117
|
-
content +=
|
|
118
|
-
|
|
81
|
+
content += ' ha sido actualizada';
|
|
82
|
+
const notificationDto = this.createNotificationDto('Tarea Actualizada', content, recipientsId, task, [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH], common_2.NotificationSubcategory.TASK_UPDATED);
|
|
83
|
+
await this.notifierService.sendNotification(notificationDto);
|
|
119
84
|
return;
|
|
120
85
|
}
|
|
121
|
-
content +=
|
|
122
|
-
if (changedFields.includes(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
content += `<br/>Fecha Limite cambiada: Ninguna`;
|
|
129
|
-
}
|
|
86
|
+
content += ' se actualizó:';
|
|
87
|
+
if (changedFields.includes('deadline')) {
|
|
88
|
+
const deadlineText = task.deadline
|
|
89
|
+
? new Date(task.deadline).toLocaleDateString()
|
|
90
|
+
: 'Ninguna';
|
|
91
|
+
content += `<br/>Fecha Límite cambiada: ${deadlineText}`;
|
|
130
92
|
}
|
|
131
|
-
if (changedFields.includes(
|
|
132
|
-
content = `Se
|
|
133
|
-
|
|
93
|
+
if (changedFields.includes('responsible') && task.responsible?.length > 0) {
|
|
94
|
+
content = `Se te ha asignado la tarea #${task.number} - ${taskLink}`;
|
|
95
|
+
const notificationDto = this.createNotificationDto('Tarea Asignada', content, [task.responsible[0].id], task, [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH], common_2.NotificationSubcategory.TASK_UPDATED);
|
|
96
|
+
await this.notifierService.sendNotification(notificationDto);
|
|
134
97
|
}
|
|
135
98
|
else {
|
|
136
|
-
if (changedFields.includes(
|
|
99
|
+
if (changedFields.includes('name')) {
|
|
137
100
|
content += `<br/>Nombre: ${task.name}`;
|
|
138
|
-
|
|
101
|
+
}
|
|
102
|
+
if (changedFields.includes('description')) {
|
|
139
103
|
content += `<br/>Descripción: ${task.description}`;
|
|
140
|
-
|
|
104
|
+
}
|
|
105
|
+
if (changedFields.includes('status')) {
|
|
141
106
|
content += `<br/>Estado: ${task.status}`;
|
|
142
|
-
|
|
107
|
+
}
|
|
108
|
+
const notificationDto = this.createNotificationDto('Tarea Actualizada', content, recipientsId, task, [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH], common_2.NotificationSubcategory.TASK_UPDATED);
|
|
109
|
+
await this.notifierService.sendNotification(notificationDto);
|
|
143
110
|
}
|
|
144
111
|
}
|
|
145
112
|
async notifyNewComment(task, comment, recipientsId) {
|
|
146
113
|
const commentText = comment.comment.slice(0, 20);
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
|
|
114
|
+
const taskLink = this.buildTaskLink(task, '#170f6b');
|
|
115
|
+
const commenterName = comment.createdBy?.name ?? 'Alguien';
|
|
116
|
+
const content = `${commenterName} comentó en la tarea: ${taskLink}. Texto del comentario: ${commentText}`;
|
|
117
|
+
const metadata = this.getMetadata(task, {
|
|
150
118
|
commentId: comment.id,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
};
|
|
155
|
-
const notificationDto = {
|
|
156
|
-
title: "New Comment",
|
|
157
|
-
content,
|
|
158
|
-
recipientsId,
|
|
159
|
-
entityId: task.id,
|
|
160
|
-
channels: [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH],
|
|
161
|
-
category: common_2.NotificationCategory.TASK,
|
|
162
|
-
subCategory: common_2.NotificationSubcategory.TASK_NEW_COMMNET,
|
|
163
|
-
metadata,
|
|
164
|
-
};
|
|
119
|
+
commentOwnerId: comment.createdBy?.id ?? null,
|
|
120
|
+
});
|
|
121
|
+
const notificationDto = this.createNotificationDto('Nuevo Comentario', content, recipientsId, task, [common_2.NotificationChannel.APP, common_2.NotificationChannel.SMS, common_2.NotificationChannel.PUSH], common_2.NotificationSubcategory.TASK_NEW_COMMENT, metadata);
|
|
165
122
|
await this.notifierService.sendNotification(notificationDto);
|
|
166
123
|
}
|
|
167
124
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.notifier.js","sourceRoot":"","sources":["../../../../src/modules/queue/notifiers/task.notifier.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,0DAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"task.notifier.js","sourceRoot":"","sources":["../../../../src/modules/queue/notifiers/task.notifier.ts"],"names":[],"mappings":"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"}
|