powr-sdk-api 4.1.10 → 4.3.0

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 (46) hide show
  1. package/dist/index.js +7 -5
  2. package/dist/{services → managers}/functions.js +1 -1
  3. package/dist/managers/index.js +26 -0
  4. package/dist/{services/scheduledTasks.js → managers/tasks.js} +123 -143
  5. package/dist/{services → managers}/tools.js +1 -1
  6. package/dist/middleware/projectId.js +1 -1
  7. package/dist/routes/functions.js +3 -1
  8. package/dist/routes/index.js +3 -27
  9. package/dist/routes/tasks.js +304 -0
  10. package/dist/routes/tools.js +21 -8
  11. package/package.json +69 -71
  12. package/dist/admin/activities.js +0 -81
  13. package/dist/admin/auth.js +0 -234
  14. package/dist/admin/blogs.js +0 -94
  15. package/dist/admin/comments.js +0 -83
  16. package/dist/admin/files.js +0 -56
  17. package/dist/admin/forms.js +0 -242
  18. package/dist/admin/index.js +0 -53
  19. package/dist/admin/invoice.js +0 -163
  20. package/dist/admin/likes.js +0 -126
  21. package/dist/admin/notifications.js +0 -93
  22. package/dist/admin/plexx.js +0 -53
  23. package/dist/admin/ratings.js +0 -189
  24. package/dist/admin/routes.js +0 -132
  25. package/dist/admin/slides.js +0 -101
  26. package/dist/admin/users.js +0 -175
  27. package/dist/admin/waitlists.js +0 -94
  28. package/dist/logger/gcs.js +0 -78
  29. package/dist/logger/s3.js +0 -78
  30. package/dist/middleware/auth.js +0 -76
  31. package/dist/middleware/logger.js +0 -45
  32. package/dist/middleware/response.js +0 -53
  33. package/dist/routes/admin/index.js +0 -520
  34. package/dist/routes/blogs.js +0 -94
  35. package/dist/routes/invoice.js +0 -167
  36. package/dist/routes/plexx.js +0 -269
  37. package/dist/routes/routes.js +0 -143
  38. package/dist/routes/scheduledTasks.js +0 -240
  39. package/dist/scripts/update-tools-schema.js +0 -157
  40. package/dist/services/dbService.js +0 -42
  41. package/dist/services/logger.js +0 -35
  42. package/dist/services/plexx.js +0 -229
  43. package/dist/utils/auth.js +0 -19
  44. package/dist/utils/logger.js +0 -57
  45. package/dist/utils/s3-transport.js +0 -61
  46. package/dist/utils/s3.js +0 -78
@@ -1,53 +0,0 @@
1
- "use strict";
2
-
3
- const express = require('express');
4
-
5
- // Import all route modules
6
- const commentsRoutes = require('./comments');
7
- // const filesRoutes = require('./files'); // Commented out for now
8
- const formsRoutes = require('./forms');
9
- const invoiceRoutes = require('./invoice');
10
- const likesRoutes = require('./likes');
11
- const plexxRoutes = require('./plexx');
12
- const ratingsRoutes = require('./ratings');
13
- const usersRoutes = require('./users');
14
- const waitlistsRoutes = require('./waitlists');
15
- const activitiesRoutes = require('./activities');
16
- const authRoutes = require('./auth');
17
- const blogsRoutes = require('./blogs');
18
- const slidesRoutes = require('./slides');
19
- const notificationsRoutes = require('./notifications');
20
- const createPowrRoutes = () => {
21
- // Get config from environment variables
22
- const {
23
- getConfig
24
- } = require('../config');
25
- const config = getConfig();
26
- const router = express.Router();
27
-
28
- // Middleware to inject projectId into all requests
29
- router.use((req, res, next) => {
30
- req.projectId = config.projectId;
31
- next();
32
- });
33
-
34
- // Mount all route modules
35
- router.use('/comments', commentsRoutes);
36
- // router.use('/files', filesRoutes); // Commented out for now
37
- router.use('/forms', formsRoutes);
38
- router.use('/invoice', invoiceRoutes);
39
- router.use('/likes', likesRoutes);
40
- router.use('/plexx', plexxRoutes);
41
- router.use('/ratings', ratingsRoutes);
42
- router.use('/users', usersRoutes);
43
- router.use('/waitlists', waitlistsRoutes);
44
- router.use('/activities', activitiesRoutes);
45
- router.use('/auth', authRoutes);
46
- router.use('/blogs', blogsRoutes);
47
- router.use('/slides', slidesRoutes);
48
- router.use('/notifications', notificationsRoutes);
49
- return router;
50
- };
51
- module.exports = {
52
- createPowrRoutes
53
- };
@@ -1,163 +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
- const {
9
- ObjectId
10
- } = require("mongodb");
11
- router.get('/', async (req, res) => {
12
- const {
13
- projectId
14
- } = req.query;
15
- try {
16
- const query = {
17
- projectId
18
- };
19
- if (!projectId) {
20
- return res.status(400).json({
21
- success: false,
22
- message: 'projectId is required.'
23
- });
24
- }
25
- const invoiceData = await getDb().collection("invoices").find(query).toArray();
26
- return res.status(200).json({
27
- success: true,
28
- invoices: invoiceData
29
- });
30
- } catch (error) {
31
- console.error("Error retrieving invoices :", error);
32
- return res.status(500).json({
33
- success: false,
34
- message: "Failed to retrieve invoices ."
35
- });
36
- }
37
- });
38
- router.get('/:invoiceId', async (req, res) => {
39
- const {
40
- invoiceId
41
- } = req.params;
42
- const {
43
- projectId
44
- } = req.query;
45
- try {
46
- if (!projectId) {
47
- return res.status(400).json({
48
- success: false,
49
- message: 'projectId is required.'
50
- });
51
- }
52
- const _id = new ObjectId(invoiceId);
53
- const invoiceData = await getDb().collection("invoices").findOne({
54
- _id,
55
- projectId
56
- });
57
- return res.status(200).json({
58
- success: true,
59
- invoice: invoiceData
60
- });
61
- } catch (error) {
62
- console.error("Error retrieving invoice :", error);
63
- return res.status(500).json({
64
- success: false,
65
- message: "Failed to retrieve invoice."
66
- });
67
- }
68
- });
69
- router.post('/', async (req, res) => {
70
- const {
71
- projectId
72
- } = req.query;
73
- const {
74
- invoiceNumber,
75
- dateOfIssue,
76
- paymentStatus,
77
- customerInfo,
78
- serviceSection,
79
- paymentSection
80
- } = req.body;
81
- if (!projectId) {
82
- return res.status(400).json({
83
- success: false,
84
- message: "projectId is required."
85
- });
86
- }
87
- const invoice = {
88
- invoiceNumber,
89
- dateOfIssue,
90
- paymentStatus,
91
- customerInfo,
92
- serviceSection,
93
- paymentSection,
94
- createdAt: new Date()
95
- };
96
- invoice.projectId = projectId;
97
- try {
98
- const result = await getDb().collection("invoices").insertOne(invoice);
99
- if (result && result.insertedId) {
100
- return res.status(201).json({
101
- success: true,
102
- message: "Invoice created successfully.",
103
- invoiceId: result.insertedId,
104
- invoice
105
- });
106
- } else {
107
- return res.status(500).json({
108
- success: false,
109
- message: "Invoice could not be added."
110
- });
111
- }
112
- } catch (error) {
113
- console.error("Error adding invoice:", error);
114
- return res.status(500).json({
115
- success: false,
116
- message: "Failed to add invoice due to a server error."
117
- });
118
- }
119
- });
120
- router.put('/:invoiceId', async (req, res) => {
121
- const {
122
- invoiceId
123
- } = req.params;
124
- const {
125
- projectId
126
- } = req.query;
127
- if (!projectId) {
128
- return res.status(400).json({
129
- success: false,
130
- message: "projectId is required."
131
- });
132
- }
133
- let filter;
134
- try {
135
- filter = {
136
- _id: new ObjectId(invoiceId),
137
- projectId: projectId
138
- };
139
- } catch (e) {
140
- return res.status(400).json({
141
- success: false,
142
- message: "Invalid invoiceId format."
143
- });
144
- }
145
- const updateData = req.body;
146
- try {
147
- const result = await getDb().collection("invoices").updateOne(filter, {
148
- $set: updateData
149
- });
150
- return res.status(200).json({
151
- success: true,
152
- message: "Invoice updated successfully.",
153
- result: result
154
- });
155
- } catch (error) {
156
- console.error("Error updating invoice:", error);
157
- return res.status(500).json({
158
- success: false,
159
- message: "Failed to update invoice due to a server error."
160
- });
161
- }
162
- });
163
- module.exports = router;
@@ -1,126 +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
- const {
9
- ObjectId
10
- } = require("mongodb");
11
-
12
- // Like/Unlike endpoint
13
- router.post('/', async (req, res) => {
14
- const {
15
- liked
16
- } = req.body;
17
- const {
18
- userId,
19
- projectId,
20
- contentId
21
- } = req.query;
22
- if (!userId || typeof liked !== 'boolean' || !projectId) {
23
- return res.status(400).json({
24
- success: false,
25
- message: 'userId and projectId are required in query, liked (boolean) is required in body.'
26
- });
27
- }
28
- try {
29
- const query = {
30
- userId: new ObjectId(userId),
31
- projectId
32
- };
33
- const setObj = {
34
- liked
35
- };
36
- if (contentId) {
37
- query.contentId = contentId;
38
- setObj.contentId = contentId;
39
- }
40
- const response = await getDb().collection('likes').updateOne(query, {
41
- $set: setObj
42
- }, {
43
- upsert: true
44
- });
45
- return res.status(200).json({
46
- success: true,
47
- message: liked ? 'Liked.' : 'Unliked.',
48
- response
49
- });
50
- } catch (error) {
51
- console.error('Error updating like status:', error);
52
- return res.status(500).json({
53
- success: false,
54
- message: 'Failed to update like status.'
55
- });
56
- }
57
- });
58
- router.get('/', async (req, res) => {
59
- const {
60
- projectId,
61
- contentId
62
- } = req.query;
63
- if (!projectId) {
64
- return res.status(400).json({
65
- success: false,
66
- message: 'projectId is required in query.'
67
- });
68
- }
69
- try {
70
- const query = {
71
- projectId
72
- };
73
- if (contentId) {
74
- query.contentId = contentId;
75
- }
76
- const likes = await getDb().collection('likes').find(query).toArray();
77
- const likesCount = likes.filter(like => like.liked === true).length;
78
- const unlikesCount = likes.filter(like => like.liked === false).length;
79
- return res.status(200).json({
80
- success: true,
81
- likes,
82
- likesCount,
83
- unlikesCount
84
- });
85
- } catch (error) {
86
- console.error('Error fetching likes:', error);
87
- return res.status(500).json({
88
- success: false,
89
- message: 'Failed to fetch likes.'
90
- });
91
- }
92
- });
93
- router.get('/:likeId', async (req, res) => {
94
- const {
95
- likeId
96
- } = req.params;
97
- const {
98
- projectId,
99
- contentId
100
- } = req.query;
101
- try {
102
- const filter = {
103
- userId: new ObjectId(likeId)
104
- };
105
- if (projectId) filter.projectId = projectId;
106
- if (contentId) filter.contentId = contentId;
107
- const like = await getDb().collection('likes').findOne(filter);
108
- if (!like) {
109
- return res.status(404).json({
110
- success: false,
111
- message: 'Like not found.'
112
- });
113
- }
114
- return res.status(200).json({
115
- success: true,
116
- like
117
- });
118
- } catch (error) {
119
- console.error('Error fetching like by id:', error);
120
- return res.status(500).json({
121
- success: false,
122
- message: 'Failed to fetch like.'
123
- });
124
- }
125
- });
126
- module.exports = router;
@@ -1,93 +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
- // const tokenService = require('../services/tokenService');
9
-
10
- // Get notifications
11
- router.get('/', async (req, res) => {
12
- const {
13
- projectId
14
- } = req.query;
15
- try {
16
- const query = {
17
- projectId
18
- };
19
- console.log("Filter.....:", query);
20
- const notificationData = await getDb().collection('notifications').find(query).toArray();
21
- if (!notificationData || notificationData.length === 0) {
22
- console.log("Data not found.");
23
- return res.status(200).json({
24
- success: true,
25
- notification: []
26
- });
27
- }
28
- const sortedData = notificationData.sort((a, b) => new Date(b === null || b === void 0 ? void 0 : b.createdAt) - new Date(a === null || a === void 0 ? void 0 : a.createdAt));
29
- console.log("Notifications retrieved and sorted:", sortedData);
30
- return res.status(200).json({
31
- success: true,
32
- notification: sortedData
33
- });
34
- } catch (error) {
35
- console.error("Error retrieving notifications:", error);
36
- return res.status(500).json({
37
- success: false,
38
- message: "Failed to retrieve notifications."
39
- });
40
- }
41
- });
42
-
43
- // Send notification
44
- router.post('/', async (req, res) => {
45
- const {
46
- projectId,
47
- title,
48
- description,
49
- filter,
50
- imgurl
51
- } = req.body;
52
- if (typeof filter !== 'object' || Array.isArray(filter) || filter === null) {
53
- return res.status(400).json({
54
- success: false,
55
- message: "Filter should be a valid object."
56
- });
57
- }
58
- const notificationData = {
59
- projectId,
60
- filter,
61
- imgurl,
62
- title,
63
- description,
64
- createdAt: new Date()
65
- };
66
- try {
67
- const result = await getDb().collection('notifications').insertOne(notificationData);
68
- if (result && result.insertedId) {
69
- console.log("Notification added with ID:", result.insertedId);
70
-
71
- // await tokenService.sendNotificationsToProjectUsers(projectId, notificationData);
72
-
73
- return res.status(200).json({
74
- success: true,
75
- message: "Notification added and sent successfully.",
76
- notificationId: result.insertedId
77
- });
78
- } else {
79
- console.error("Insert operation failed. Result:", result);
80
- return res.status(500).json({
81
- success: false,
82
- message: "Notification could not be added."
83
- });
84
- }
85
- } catch (error) {
86
- console.error("Error adding notification:", error);
87
- return res.status(500).json({
88
- success: false,
89
- message: "Failed to add notification due to a server error."
90
- });
91
- }
92
- });
93
- module.exports = router;
@@ -1,53 +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
- const data = [{
9
- age: 12
10
- }, {
11
- age: 45
12
- }];
13
- router.get("/:route", async (req, res) => {
14
- const {
15
- route
16
- } = req.params;
17
- const {
18
- name,
19
- projectId
20
- } = req.query;
21
- if (!projectId) {
22
- return res.status(400).json({
23
- success: false,
24
- message: 'projectId is required.'
25
- });
26
- }
27
- const logicEntry = await getDb().collection("routes").findOne({
28
- route,
29
- projectId
30
- });
31
- if (!logicEntry) {
32
- return res.status(404).json({
33
- success: false,
34
- message: "Logic not found"
35
- });
36
- }
37
- const codeString = logicEntry.code;
38
- try {
39
- const logicFunction = new Function("age", codeString);
40
- const status = logicFunction(name);
41
- return res.status(200).json({
42
- success: true,
43
- data: status
44
- });
45
- } catch (err) {
46
- console.error("Error executing logic:", err);
47
- return res.status(500).json({
48
- success: false,
49
- message: "Error executing logic"
50
- });
51
- }
52
- });
53
- module.exports = router;
@@ -1,189 +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
- const {
9
- ObjectId
10
- } = require("mongodb");
11
-
12
- //add ratings
13
- router.post("/", async (req, res) => {
14
- const {
15
- itemId,
16
- rating,
17
- review,
18
- userId
19
- } = req.body;
20
- const projectId = req.projectId;
21
- if (!rating || !review) {
22
- return res.status(400).json({
23
- success: false,
24
- message: "All fields are required."
25
- });
26
- }
27
- const ratingData = {
28
- projectId,
29
- itemId,
30
- rating,
31
- review,
32
- userId,
33
- createdAt: new Date()
34
- };
35
- try {
36
- const db = await getDb();
37
- const result = await db.collection("ratings").insertOne(ratingData);
38
- if (result && result.insertedId) {
39
- console.log("ratings added with ID:", result.insertedId);
40
- return res.status(200).json({
41
- success: true,
42
- message: "rating added successfully.",
43
- ratingId: result.insertedId
44
- });
45
- } else {
46
- console.error("Insert operation failed. Result:", result);
47
- return res.status(500).json({
48
- success: false,
49
- message: "ratings/reviews could not be added."
50
- });
51
- }
52
- } catch (error) {
53
- console.error("Error adding ratings:", error);
54
- return res.status(500).json({
55
- success: false,
56
- message: "Failed to add ratings/reviews due to a server error."
57
- });
58
- }
59
- });
60
-
61
- //get ratings
62
- router.get("/", async (req, res) => {
63
- const {
64
- itemId,
65
- userId
66
- } = req.query;
67
- const projectId = req.projectId;
68
- if (!projectId) {
69
- return res.status(400).json({
70
- success: false,
71
- message: "projectId is required."
72
- });
73
- }
74
- try {
75
- const query = {
76
- projectId
77
- };
78
- if (itemId) query.itemId = itemId;
79
- if (userId) query.userId = userId;
80
- console.log("Filter....:", query);
81
- const db = await getDb();
82
- const ratingData = await db.collection("ratings").find(query).toArray();
83
- if (!ratingData || ratingData.length === 0) {
84
- console.log("Data not found.");
85
- return res.status(200).json({
86
- success: true,
87
- ratings: []
88
- });
89
- }
90
- return res.status(200).json({
91
- success: true,
92
- ratings: ratingData
93
- });
94
- } catch (error) {
95
- console.error("Error retrieving ratings:", error);
96
- return res.status(500).json({
97
- success: false,
98
- message: "Failed to retrieve ratings."
99
- });
100
- }
101
- });
102
-
103
- // delete ratings
104
- router.delete("/", async (req, res) => {
105
- const {
106
- ratingId
107
- } = req.query;
108
- const projectId = req.projectId;
109
- if (!ratingId || !projectId) {
110
- return res.status(400).json({
111
- success: false,
112
- message: "Both ratingId and projectId are required to delete a rating."
113
- });
114
- }
115
- try {
116
- const db = await getDb();
117
- const result = await db.collection("ratings").deleteOne({
118
- _id: new ObjectId(ratingId),
119
- projectId: projectId
120
- });
121
- if (result.deletedCount === 0) {
122
- return res.status(404).json({
123
- success: false,
124
- message: "Rating not found for the given ratingId and projectId."
125
- });
126
- }
127
- return res.status(200).json({
128
- success: true,
129
- message: "Rating deleted successfully."
130
- });
131
- } catch (error) {
132
- console.error("Error deleting rating:", error);
133
- return res.status(500).json({
134
- success: false,
135
- message: "Failed to delete rating due to a server error."
136
- });
137
- }
138
- });
139
-
140
- // Calculate average rating
141
- router.get("/average", async (req, res) => {
142
- const {
143
- itemId
144
- } = req.query;
145
- const projectId = req.projectId;
146
- if (!projectId || !itemId) {
147
- return res.status(400).json({
148
- success: false,
149
- message: "Both projectId and itemId are required."
150
- });
151
- }
152
- try {
153
- const db = await getDb();
154
- const result = await db.collection("ratings").aggregate([{
155
- $match: {
156
- projectId,
157
- itemId
158
- }
159
- }, {
160
- $group: {
161
- _id: null,
162
- averageRating: {
163
- $avg: "$rating"
164
- },
165
- totalRatings: {
166
- $sum: 1
167
- }
168
- }
169
- }]).toArray();
170
- if (result.length === 0) {
171
- return res.status(404).json({
172
- success: false,
173
- message: "No ratings found for the given projectId and itemId."
174
- });
175
- }
176
- return res.status(200).json({
177
- success: true,
178
- averageRating: result[0].averageRating.toFixed(2),
179
- totalRatings: result[0].totalRatings
180
- });
181
- } catch (error) {
182
- console.error("Error calculating average rating:", error);
183
- return res.status(500).json({
184
- success: false,
185
- message: "Failed to calculate average rating."
186
- });
187
- }
188
- });
189
- module.exports = router;