powr-sdk-api 4.2.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +7 -5
- package/dist/{services → managers}/functions.js +1 -1
- package/dist/managers/index.js +26 -0
- package/dist/{services → managers}/tasks.js +128 -148
- package/dist/{services → managers}/tools.js +1 -1
- package/dist/routes/functions.js +3 -1
- package/dist/routes/index.js +2 -17
- package/dist/routes/tasks.js +184 -63
- package/dist/routes/tools.js +21 -8
- package/package.json +69 -71
- package/dist/admin/activities.js +0 -81
- package/dist/admin/auth.js +0 -234
- package/dist/admin/blogs.js +0 -94
- package/dist/admin/comments.js +0 -83
- package/dist/admin/files.js +0 -56
- package/dist/admin/forms.js +0 -242
- package/dist/admin/index.js +0 -53
- package/dist/admin/invoice.js +0 -163
- package/dist/admin/likes.js +0 -126
- package/dist/admin/notifications.js +0 -93
- package/dist/admin/plexx.js +0 -53
- package/dist/admin/ratings.js +0 -189
- package/dist/admin/routes.js +0 -132
- package/dist/admin/slides.js +0 -101
- package/dist/admin/users.js +0 -175
- package/dist/admin/waitlists.js +0 -94
- package/dist/logger/gcs.js +0 -78
- package/dist/logger/s3.js +0 -78
- package/dist/middleware/auth.js +0 -76
- package/dist/middleware/logger.js +0 -45
- package/dist/middleware/response.js +0 -53
- package/dist/routes/admin/index.js +0 -520
- package/dist/routes/blogs.js +0 -94
- package/dist/routes/invoice.js +0 -167
- package/dist/routes/plexx.js +0 -269
- package/dist/routes/routes.js +0 -143
- package/dist/routes/scheduledTasks.js +0 -240
- package/dist/scripts/update-tools-schema.js +0 -157
- package/dist/services/dbService.js +0 -42
- package/dist/services/logger.js +0 -35
- package/dist/services/plexx.js +0 -229
- package/dist/services/scheduledTasks.js +0 -459
- package/dist/utils/auth.js +0 -19
- package/dist/utils/logger.js +0 -57
- package/dist/utils/s3-transport.js +0 -61
- package/dist/utils/s3.js +0 -78
package/dist/routes/tasks.js
CHANGED
|
@@ -2,32 +2,57 @@
|
|
|
2
2
|
|
|
3
3
|
const express = require("express");
|
|
4
4
|
const router = express.Router();
|
|
5
|
-
const toolsManager = require("../services/tools");
|
|
6
5
|
const {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
toolsManager,
|
|
7
|
+
scheduledTasksManager
|
|
8
|
+
} = require("../managers");
|
|
9
9
|
|
|
10
10
|
// GET /tasks - Get all tasks
|
|
11
11
|
router.get("/", async (req, res) => {
|
|
12
|
-
const projectId = req.projectId;
|
|
13
12
|
try {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
const isAdmin = req.user.access === 100;
|
|
14
|
+
const result = await scheduledTasksManager.getUserTasks(req.user.powrId, req.projectId, isAdmin);
|
|
15
|
+
if (result.success) {
|
|
16
|
+
return res.status(200).json({
|
|
17
|
+
success: true,
|
|
18
|
+
tasks: result.tasks
|
|
19
|
+
});
|
|
20
|
+
} else {
|
|
21
|
+
return res.status(400).json({
|
|
22
|
+
success: false,
|
|
23
|
+
message: result.message
|
|
24
|
+
});
|
|
19
25
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return res.status(
|
|
23
|
-
success:
|
|
24
|
-
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error("Error retrieving tasks:", error);
|
|
28
|
+
return res.status(500).json({
|
|
29
|
+
success: false,
|
|
30
|
+
message: "Failed to retrieve tasks."
|
|
25
31
|
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// GET /tasks/:taskId - Get specific task
|
|
36
|
+
router.get("/:taskId", async (req, res) => {
|
|
37
|
+
try {
|
|
38
|
+
const isAdmin = req.user.access === 100;
|
|
39
|
+
const result = await scheduledTasksManager.getTask(req.params.taskId, req.user.powrId, req.projectId, isAdmin);
|
|
40
|
+
if (result.success) {
|
|
41
|
+
return res.status(200).json({
|
|
42
|
+
success: true,
|
|
43
|
+
task: result.task
|
|
44
|
+
});
|
|
45
|
+
} else {
|
|
46
|
+
return res.status(404).json({
|
|
47
|
+
success: false,
|
|
48
|
+
message: result.message
|
|
49
|
+
});
|
|
50
|
+
}
|
|
26
51
|
} catch (error) {
|
|
27
|
-
console.error("Error retrieving
|
|
52
|
+
console.error("Error retrieving task:", error);
|
|
28
53
|
return res.status(500).json({
|
|
29
54
|
success: false,
|
|
30
|
-
message: "Failed to retrieve
|
|
55
|
+
message: "Failed to retrieve task."
|
|
31
56
|
});
|
|
32
57
|
}
|
|
33
58
|
});
|
|
@@ -39,7 +64,7 @@ router.post("/", async (req, res) => {
|
|
|
39
64
|
const {
|
|
40
65
|
name,
|
|
41
66
|
description,
|
|
42
|
-
|
|
67
|
+
scheduledFor,
|
|
43
68
|
toolId,
|
|
44
69
|
actionId,
|
|
45
70
|
params,
|
|
@@ -47,10 +72,10 @@ router.post("/", async (req, res) => {
|
|
|
47
72
|
} = req.body;
|
|
48
73
|
|
|
49
74
|
// Validate required fields
|
|
50
|
-
if (!name || !
|
|
75
|
+
if (!name || !toolId || !actionId) {
|
|
51
76
|
return res.status(400).json({
|
|
52
77
|
success: false,
|
|
53
|
-
message: "Missing required fields: name,
|
|
78
|
+
message: "Missing required fields: name, toolId, actionId"
|
|
54
79
|
});
|
|
55
80
|
}
|
|
56
81
|
|
|
@@ -74,24 +99,28 @@ router.post("/", async (req, res) => {
|
|
|
74
99
|
const taskData = {
|
|
75
100
|
name,
|
|
76
101
|
description,
|
|
77
|
-
|
|
102
|
+
scheduledFor,
|
|
103
|
+
// null, timestamp, or cron expression
|
|
78
104
|
toolId,
|
|
79
105
|
actionId,
|
|
80
106
|
params: params || {},
|
|
107
|
+
userId: req.user.powrId,
|
|
81
108
|
projectId: req.projectId,
|
|
82
|
-
|
|
83
|
-
isActive: isActive !== false,
|
|
84
|
-
// Default to true
|
|
85
|
-
createdAt: new Date(),
|
|
86
|
-
updatedAt: new Date()
|
|
109
|
+
isActive: isActive !== false // Default to true
|
|
87
110
|
};
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
const result = await scheduledTasksManager.createTask(taskData);
|
|
112
|
+
if (result.success) {
|
|
113
|
+
res.status(201).json({
|
|
114
|
+
success: true,
|
|
115
|
+
message: "Task created successfully",
|
|
116
|
+
task: result.task
|
|
117
|
+
});
|
|
118
|
+
} else {
|
|
119
|
+
res.status(400).json({
|
|
120
|
+
success: false,
|
|
121
|
+
message: result.message
|
|
122
|
+
});
|
|
123
|
+
}
|
|
95
124
|
} catch (error) {
|
|
96
125
|
console.error("❌ Error creating scheduled task:", error);
|
|
97
126
|
res.status(500).json({
|
|
@@ -107,7 +136,7 @@ router.put("/:taskId", async (req, res) => {
|
|
|
107
136
|
const {
|
|
108
137
|
name,
|
|
109
138
|
description,
|
|
110
|
-
|
|
139
|
+
scheduledFor,
|
|
111
140
|
toolId,
|
|
112
141
|
actionId,
|
|
113
142
|
params,
|
|
@@ -136,47 +165,139 @@ router.put("/:taskId", async (req, res) => {
|
|
|
136
165
|
}
|
|
137
166
|
}
|
|
138
167
|
}
|
|
139
|
-
const
|
|
140
|
-
if (name !== undefined)
|
|
141
|
-
if (description !== undefined)
|
|
142
|
-
if (
|
|
143
|
-
if (toolId !== undefined)
|
|
144
|
-
if (actionId !== undefined)
|
|
145
|
-
if (params !== undefined)
|
|
146
|
-
if (isActive !== undefined)
|
|
168
|
+
const updateData = {};
|
|
169
|
+
if (name !== undefined) updateData.name = name;
|
|
170
|
+
if (description !== undefined) updateData.description = description;
|
|
171
|
+
if (scheduledFor !== undefined) updateData.scheduledFor = scheduledFor;
|
|
172
|
+
if (toolId !== undefined) updateData.toolId = toolId;
|
|
173
|
+
if (actionId !== undefined) updateData.actionId = actionId;
|
|
174
|
+
if (params !== undefined) updateData.params = params;
|
|
175
|
+
if (isActive !== undefined) updateData.isActive = isActive;
|
|
176
|
+
const isAdmin = req.user.access === 100;
|
|
177
|
+
const result = await scheduledTasksManager.updateTask(req.params.taskId, req.user.powrId, req.projectId, updateData, isAdmin);
|
|
178
|
+
if (result.success) {
|
|
179
|
+
res.status(200).json({
|
|
180
|
+
success: true,
|
|
181
|
+
message: "Task updated successfully"
|
|
182
|
+
});
|
|
183
|
+
} else {
|
|
184
|
+
res.status(400).json({
|
|
185
|
+
success: false,
|
|
186
|
+
message: result.message
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
} catch (error) {
|
|
190
|
+
console.error("❌ Error updating scheduled task:", error);
|
|
191
|
+
res.status(500).json({
|
|
192
|
+
success: false,
|
|
193
|
+
message: "Failed to update scheduled task"
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
});
|
|
147
197
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
198
|
+
// POST /tasks/:taskId/execute - Execute task manually
|
|
199
|
+
router.post("/:taskId/execute", async (req, res) => {
|
|
200
|
+
try {
|
|
201
|
+
const taskId = req.params.taskId;
|
|
202
|
+
const isAdmin = req.user.access === 100;
|
|
203
|
+
const result = await scheduledTasksManager.executeTask(taskId, req.user.powrId, req.projectId, isAdmin);
|
|
204
|
+
if (result.success) {
|
|
205
|
+
res.json({
|
|
206
|
+
success: true,
|
|
207
|
+
message: "Task executed successfully",
|
|
208
|
+
result: result.result
|
|
209
|
+
});
|
|
210
|
+
} else {
|
|
211
|
+
res.status(400).json({
|
|
157
212
|
success: false,
|
|
158
|
-
message:
|
|
213
|
+
message: result.message
|
|
159
214
|
});
|
|
160
215
|
}
|
|
216
|
+
} catch (error) {
|
|
217
|
+
console.error("❌ Error executing scheduled task:", error);
|
|
218
|
+
res.status(500).json({
|
|
219
|
+
success: false,
|
|
220
|
+
message: "Failed to execute scheduled task"
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
});
|
|
161
224
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
225
|
+
// POST /tasks/:taskId/toggle - Toggle task active status
|
|
226
|
+
router.post("/:taskId/toggle", async (req, res) => {
|
|
227
|
+
try {
|
|
228
|
+
const taskId = req.params.taskId;
|
|
229
|
+
const {
|
|
230
|
+
isActive
|
|
231
|
+
} = req.body;
|
|
232
|
+
const isAdmin = req.user.access === 100;
|
|
233
|
+
const result = await scheduledTasksManager.toggleTask(taskId, req.user.powrId, req.projectId, isActive, isAdmin);
|
|
234
|
+
if (result.success) {
|
|
235
|
+
res.json({
|
|
236
|
+
success: true,
|
|
237
|
+
message: `Task ${isActive ? 'activated' : 'deactivated'} successfully`
|
|
238
|
+
});
|
|
239
|
+
} else {
|
|
240
|
+
res.status(400).json({
|
|
241
|
+
success: false,
|
|
242
|
+
message: result.message
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
} catch (error) {
|
|
246
|
+
console.error("❌ Error toggling scheduled task:", error);
|
|
247
|
+
res.status(500).json({
|
|
248
|
+
success: false,
|
|
249
|
+
message: "Failed to toggle scheduled task"
|
|
170
250
|
});
|
|
171
|
-
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// DELETE /tasks/:taskId - Delete task
|
|
255
|
+
router.delete("/:taskId", async (req, res) => {
|
|
256
|
+
try {
|
|
257
|
+
const taskId = req.params.taskId;
|
|
258
|
+
const isAdmin = req.user.access === 100;
|
|
259
|
+
const result = await scheduledTasksManager.deleteTask(taskId, req.user.powrId, req.projectId, isAdmin);
|
|
260
|
+
if (result.success) {
|
|
261
|
+
res.json({
|
|
262
|
+
success: true,
|
|
263
|
+
message: "Task deleted successfully"
|
|
264
|
+
});
|
|
265
|
+
} else {
|
|
266
|
+
res.status(400).json({
|
|
267
|
+
success: false,
|
|
268
|
+
message: result.message
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
} catch (error) {
|
|
272
|
+
console.error("❌ Error deleting scheduled task:", error);
|
|
273
|
+
res.status(500).json({
|
|
274
|
+
success: false,
|
|
275
|
+
message: "Failed to delete scheduled task"
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// POST /tasks/execute-scheduled - Execute all scheduled tasks (called by Atlas)
|
|
281
|
+
router.post("/execute-scheduled", async (req, res) => {
|
|
282
|
+
try {
|
|
283
|
+
const projectId = req.projectId;
|
|
284
|
+
console.log(`🔍 API: Executing scheduled tasks for project: ${projectId}`);
|
|
285
|
+
|
|
286
|
+
// Execute all scheduled tasks for this project
|
|
287
|
+
const result = await scheduledTasksManager.executeScheduledTasks(projectId);
|
|
288
|
+
console.log(`✅ API: Scheduled tasks execution completed for project: ${projectId}`);
|
|
289
|
+
res.json({
|
|
172
290
|
success: true,
|
|
173
|
-
message: "
|
|
291
|
+
message: "Scheduled tasks executed successfully",
|
|
292
|
+
projectId: projectId,
|
|
293
|
+
result: result
|
|
174
294
|
});
|
|
175
295
|
} catch (error) {
|
|
176
|
-
console.error("❌ Error
|
|
296
|
+
console.error("❌ API: Error executing scheduled tasks:", error);
|
|
177
297
|
res.status(500).json({
|
|
178
298
|
success: false,
|
|
179
|
-
message: "Failed to
|
|
299
|
+
message: "Failed to execute scheduled tasks",
|
|
300
|
+
error: error.message
|
|
180
301
|
});
|
|
181
302
|
}
|
|
182
303
|
});
|
package/dist/routes/tools.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
const express = require("express");
|
|
4
4
|
const router = express.Router();
|
|
5
|
-
const
|
|
5
|
+
const {
|
|
6
|
+
toolsManager
|
|
7
|
+
} = require("../managers");
|
|
6
8
|
const {
|
|
7
9
|
getDb
|
|
8
10
|
} = require("../services/mongo");
|
|
@@ -192,7 +194,7 @@ router.post('/:toolId/configure', async (req, res) => {
|
|
|
192
194
|
// Execute tool action
|
|
193
195
|
router.post('/:toolId/execute', async (req, res) => {
|
|
194
196
|
try {
|
|
195
|
-
var _req$
|
|
197
|
+
var _req$headers$authoriz;
|
|
196
198
|
const {
|
|
197
199
|
toolId
|
|
198
200
|
} = req.params;
|
|
@@ -200,13 +202,24 @@ router.post('/:toolId/execute', async (req, res) => {
|
|
|
200
202
|
actionId,
|
|
201
203
|
params
|
|
202
204
|
} = req.body;
|
|
203
|
-
const userId = (_req$user2 = req.user) === null || _req$user2 === void 0 ? void 0 : _req$user2.powrId; // From JWT token
|
|
204
205
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
// Check for service-to-service authentication
|
|
207
|
+
const apiKey = req.headers['x-api-key'] || ((_req$headers$authoriz = req.headers['authorization']) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.replace('Bearer ', ''));
|
|
208
|
+
const isServiceCall = apiKey === process.env.POWR_SERVICE_API_KEY;
|
|
209
|
+
let userId;
|
|
210
|
+
if (isServiceCall) {
|
|
211
|
+
// For service calls, use the userId from the task
|
|
212
|
+
userId = req.headers['x-user-id'] || 'system';
|
|
213
|
+
} else {
|
|
214
|
+
var _req$user2;
|
|
215
|
+
// For regular calls, use JWT token
|
|
216
|
+
userId = (_req$user2 = req.user) === null || _req$user2 === void 0 ? void 0 : _req$user2.powrId;
|
|
217
|
+
if (!userId) {
|
|
218
|
+
return res.status(401).json({
|
|
219
|
+
success: false,
|
|
220
|
+
message: "User not authenticated"
|
|
221
|
+
});
|
|
222
|
+
}
|
|
210
223
|
}
|
|
211
224
|
if (!actionId) {
|
|
212
225
|
return res.status(400).json({
|
package/package.json
CHANGED
|
@@ -1,71 +1,69 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "powr-sdk-api",
|
|
3
|
-
"version": "4.
|
|
4
|
-
"description": "Shared API core library for PowrStack projects",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist",
|
|
9
|
-
"README.md"
|
|
10
|
-
],
|
|
11
|
-
"scripts": {
|
|
12
|
-
"test": "jest --passWithNoTests",
|
|
13
|
-
"lint": "eslint .",
|
|
14
|
-
"build": "babel src -d dist",
|
|
15
|
-
"prepare": "npm run build",
|
|
16
|
-
"prepublishOnly": "npm run test"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"api",
|
|
20
|
-
"express",
|
|
21
|
-
"middleware",
|
|
22
|
-
"error-handling",
|
|
23
|
-
"response-formatting",
|
|
24
|
-
"logging",
|
|
25
|
-
"swagger",
|
|
26
|
-
"documentation"
|
|
27
|
-
],
|
|
28
|
-
"author": "Lawazia Tech",
|
|
29
|
-
"license": "ISC",
|
|
30
|
-
"repository": {
|
|
31
|
-
"type": "git",
|
|
32
|
-
"url": "git+https://github.com/powrstack/powr-sdk-api.git"
|
|
33
|
-
},
|
|
34
|
-
"bugs": {
|
|
35
|
-
"url": "https://github.com/powrstack/powr-sdk-api/issues"
|
|
36
|
-
},
|
|
37
|
-
"homepage": "https://github.com/powrstack/powr-sdk-api#readme",
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"@aws-sdk/client-s3": "^3.787.0",
|
|
40
|
-
"@google-cloud/storage": "^7.16.0",
|
|
41
|
-
"axios": "^1.6.0",
|
|
42
|
-
"bcrypt": "^5.1.1",
|
|
43
|
-
"cron-parser": "^4.9.0",
|
|
44
|
-
"express": "^4.18.2",
|
|
45
|
-
"jsonwebtoken": "^9.0.2",
|
|
46
|
-
"mongodb": "^6.3.0",
|
|
47
|
-
"multer": "^1.4.5-lts.1",
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"@babel/
|
|
56
|
-
"@
|
|
57
|
-
"@
|
|
58
|
-
"@types/express": "^4.
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "powr-sdk-api",
|
|
3
|
+
"version": "4.3.1",
|
|
4
|
+
"description": "Shared API core library for PowrStack projects",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"test": "jest --passWithNoTests",
|
|
13
|
+
"lint": "eslint .",
|
|
14
|
+
"build": "babel src -d dist",
|
|
15
|
+
"prepare": "npm run build",
|
|
16
|
+
"prepublishOnly": "npm run test"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"api",
|
|
20
|
+
"express",
|
|
21
|
+
"middleware",
|
|
22
|
+
"error-handling",
|
|
23
|
+
"response-formatting",
|
|
24
|
+
"logging",
|
|
25
|
+
"swagger",
|
|
26
|
+
"documentation"
|
|
27
|
+
],
|
|
28
|
+
"author": "Lawazia Tech",
|
|
29
|
+
"license": "ISC",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/powrstack/powr-sdk-api.git"
|
|
33
|
+
},
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/powrstack/powr-sdk-api/issues"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/powrstack/powr-sdk-api#readme",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@aws-sdk/client-s3": "^3.787.0",
|
|
40
|
+
"@google-cloud/storage": "^7.16.0",
|
|
41
|
+
"axios": "^1.6.0",
|
|
42
|
+
"bcrypt": "^5.1.1",
|
|
43
|
+
"cron-parser": "^4.9.0",
|
|
44
|
+
"express": "^4.18.2",
|
|
45
|
+
"jsonwebtoken": "^9.0.2",
|
|
46
|
+
"mongodb": "^6.3.0",
|
|
47
|
+
"multer": "^1.4.5-lts.1",
|
|
48
|
+
"nodemailer": "^6.10.0",
|
|
49
|
+
"swagger-jsdoc": "^6.2.8",
|
|
50
|
+
"winston": "^3.17.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@babel/cli": "^7.23.9",
|
|
54
|
+
"@babel/core": "^7.24.0",
|
|
55
|
+
"@babel/preset-env": "^7.24.0",
|
|
56
|
+
"@types/express": "^4.17.21",
|
|
57
|
+
"@types/swagger-jsdoc": "^6.0.4",
|
|
58
|
+
"@types/swagger-ui-express": "^4.1.6",
|
|
59
|
+
"eslint": "^8.57.0",
|
|
60
|
+
"jest": "^29.7.0",
|
|
61
|
+
"typescript": "^5.3.3"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"express": "^4.18.2"
|
|
65
|
+
},
|
|
66
|
+
"engines": {
|
|
67
|
+
"node": ">=14.0.0"
|
|
68
|
+
}
|
|
69
|
+
}
|
package/dist/admin/activities.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const express = require("express");
|
|
4
|
-
const router = express.Router();
|
|
5
|
-
const {
|
|
6
|
-
getDb
|
|
7
|
-
} = require("../services/mongo");
|
|
8
|
-
|
|
9
|
-
// Get activities
|
|
10
|
-
router.get("/", async (req, res) => {
|
|
11
|
-
const {
|
|
12
|
-
projectId,
|
|
13
|
-
contentId
|
|
14
|
-
} = req.query;
|
|
15
|
-
try {
|
|
16
|
-
const query = {
|
|
17
|
-
projectId
|
|
18
|
-
};
|
|
19
|
-
if (contentId) {
|
|
20
|
-
query.contentId = contentId;
|
|
21
|
-
}
|
|
22
|
-
console.log("Filter.....:", query);
|
|
23
|
-
const activities = await getDb().collection("activities").find(query).toArray();
|
|
24
|
-
if (!activities || activities.length === 0) {
|
|
25
|
-
console.log("Data not found.");
|
|
26
|
-
return res.status(200).json({
|
|
27
|
-
success: true,
|
|
28
|
-
activities: []
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return res.status(200).json({
|
|
32
|
-
success: true,
|
|
33
|
-
activities: activities
|
|
34
|
-
});
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.error("Error retrieving activities:", error);
|
|
37
|
-
return res.status(500).json({
|
|
38
|
-
success: false,
|
|
39
|
-
message: "Failed to retrieve activities."
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// Add activity
|
|
45
|
-
router.post("/", async (req, res) => {
|
|
46
|
-
const {
|
|
47
|
-
projectId,
|
|
48
|
-
contentId,
|
|
49
|
-
activity
|
|
50
|
-
} = req.body;
|
|
51
|
-
const activityData = {
|
|
52
|
-
projectId,
|
|
53
|
-
contentId,
|
|
54
|
-
activity,
|
|
55
|
-
createdAt: new Date()
|
|
56
|
-
};
|
|
57
|
-
try {
|
|
58
|
-
const result = await getDb().collection("activities").insertOne(activityData);
|
|
59
|
-
if (result && result.insertedId) {
|
|
60
|
-
console.log("Activity added with ID:", result.insertedId);
|
|
61
|
-
return res.status(200).json({
|
|
62
|
-
success: true,
|
|
63
|
-
message: "Activity added successfully.",
|
|
64
|
-
activityId: result.insertedId
|
|
65
|
-
});
|
|
66
|
-
} else {
|
|
67
|
-
console.error("Insert operation failed. Result:", result);
|
|
68
|
-
return res.status(500).json({
|
|
69
|
-
success: false,
|
|
70
|
-
message: "Activity could not be added."
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
} catch (error) {
|
|
74
|
-
console.error("Error adding activity:", error);
|
|
75
|
-
return res.status(500).json({
|
|
76
|
-
success: false,
|
|
77
|
-
message: "Failed to add activity due to a server error."
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
module.exports = router;
|