powr-sdk-api 4.3.14 → 4.4.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.
- package/package.json +9 -7
- 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/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/services/dbService.js +0 -42
- package/dist/services/functions.js +0 -229
- package/dist/services/plexx.js +0 -229
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "powr-sdk-api",
|
|
3
|
-
"version": "4.
|
|
4
|
-
"description": "Shared API core library for PowrStack projects",
|
|
3
|
+
"version": "4.4.0",
|
|
4
|
+
"description": "Shared API core library for PowrStack projects. Zero dependencies - works with Express, Next.js API routes, and other frameworks. All features are optional and install only what you need.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -18,12 +18,16 @@
|
|
|
18
18
|
"keywords": [
|
|
19
19
|
"api",
|
|
20
20
|
"express",
|
|
21
|
+
"nextjs",
|
|
21
22
|
"middleware",
|
|
22
23
|
"error-handling",
|
|
23
24
|
"response-formatting",
|
|
24
25
|
"logging",
|
|
25
26
|
"swagger",
|
|
26
|
-
"documentation"
|
|
27
|
+
"documentation",
|
|
28
|
+
"optional-dependencies",
|
|
29
|
+
"modular",
|
|
30
|
+
"framework-agnostic"
|
|
27
31
|
],
|
|
28
32
|
"author": "Lawazia Tech",
|
|
29
33
|
"license": "ISC",
|
|
@@ -35,7 +39,8 @@
|
|
|
35
39
|
"url": "https://github.com/powrstack/powr-sdk-api/issues"
|
|
36
40
|
},
|
|
37
41
|
"homepage": "https://github.com/powrstack/powr-sdk-api#readme",
|
|
38
|
-
"dependencies": {
|
|
42
|
+
"dependencies": {},
|
|
43
|
+
"optionalDependencies": {
|
|
39
44
|
"@aws-sdk/client-s3": "^3.787.0",
|
|
40
45
|
"@google-cloud/storage": "^7.16.0",
|
|
41
46
|
"axios": "^1.6.0",
|
|
@@ -60,9 +65,6 @@
|
|
|
60
65
|
"jest": "^29.7.0",
|
|
61
66
|
"typescript": "^5.3.3"
|
|
62
67
|
},
|
|
63
|
-
"peerDependencies": {
|
|
64
|
-
"express": "^4.18.2"
|
|
65
|
-
},
|
|
66
68
|
"engines": {
|
|
67
69
|
"node": ">=14.0.0"
|
|
68
70
|
}
|
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;
|
package/dist/admin/auth.js
DELETED
|
@@ -1,234 +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
|
-
const bcrypt = require("bcrypt");
|
|
12
|
-
const {
|
|
13
|
-
generateJWTToken
|
|
14
|
-
} = require("../middleware/jwtToken");
|
|
15
|
-
const {
|
|
16
|
-
config
|
|
17
|
-
} = require("../config");
|
|
18
|
-
|
|
19
|
-
// Register User
|
|
20
|
-
router.post("/register", async (req, res) => {
|
|
21
|
-
const {
|
|
22
|
-
fullName,
|
|
23
|
-
username,
|
|
24
|
-
password
|
|
25
|
-
} = req.body;
|
|
26
|
-
try {
|
|
27
|
-
if (!fullName || !username || !password) {
|
|
28
|
-
return res.status(400).json({
|
|
29
|
-
success: false,
|
|
30
|
-
message: "Full name, username and password are required"
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
const existingUser = await getDb().collection("users").findOne({
|
|
34
|
-
username: username
|
|
35
|
-
});
|
|
36
|
-
if (existingUser) {
|
|
37
|
-
return res.status(400).json({
|
|
38
|
-
success: false,
|
|
39
|
-
message: "The username is already taken"
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
const saltRounds = 10;
|
|
43
|
-
const hashedPassword = await bcrypt.hash(password, saltRounds);
|
|
44
|
-
const newUser = {
|
|
45
|
-
fullName,
|
|
46
|
-
username,
|
|
47
|
-
password: hashedPassword,
|
|
48
|
-
createdAt: new Date()
|
|
49
|
-
};
|
|
50
|
-
const result = await getDb().collection("users").insertOne(newUser);
|
|
51
|
-
return res.status(201).json({
|
|
52
|
-
success: true,
|
|
53
|
-
message: "User registered successfully",
|
|
54
|
-
userId: result.insertedId
|
|
55
|
-
});
|
|
56
|
-
} catch (error) {
|
|
57
|
-
console.error("Error creating user:", error);
|
|
58
|
-
return res.status(500).json({
|
|
59
|
-
success: false,
|
|
60
|
-
message: "Failed to create user."
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Login User
|
|
66
|
-
router.post("/login", async (req, res) => {
|
|
67
|
-
const {
|
|
68
|
-
username,
|
|
69
|
-
password
|
|
70
|
-
} = req.body;
|
|
71
|
-
try {
|
|
72
|
-
if (!username || !password) {
|
|
73
|
-
return res.status(400).json({
|
|
74
|
-
success: false,
|
|
75
|
-
message: "Username and password are required"
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
const user = await getDb().collection("users").findOne({
|
|
79
|
-
username: username
|
|
80
|
-
});
|
|
81
|
-
if (!user) {
|
|
82
|
-
return res.status(401).json({
|
|
83
|
-
success: false,
|
|
84
|
-
message: "Invalid username or password."
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
const isPasswordValid = await bcrypt.compare(password, user.password);
|
|
88
|
-
if (!isPasswordValid) {
|
|
89
|
-
return res.status(401).json({
|
|
90
|
-
success: false,
|
|
91
|
-
message: "Invalid username or password."
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
const token = generateJWTToken(user);
|
|
95
|
-
const {
|
|
96
|
-
password: _,
|
|
97
|
-
...userWithoutPassword
|
|
98
|
-
} = user;
|
|
99
|
-
return res.status(200).json({
|
|
100
|
-
success: true,
|
|
101
|
-
message: "Login successful",
|
|
102
|
-
user: userWithoutPassword,
|
|
103
|
-
token: token
|
|
104
|
-
});
|
|
105
|
-
} catch (error) {
|
|
106
|
-
console.error("Error logging in:", error);
|
|
107
|
-
return res.status(500).json({
|
|
108
|
-
success: false,
|
|
109
|
-
message: "Failed to login."
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
// Forgot Password
|
|
115
|
-
router.post("/forgot-password", async (req, res) => {
|
|
116
|
-
const {
|
|
117
|
-
username
|
|
118
|
-
} = req.body;
|
|
119
|
-
try {
|
|
120
|
-
if (!username) {
|
|
121
|
-
return res.status(400).json({
|
|
122
|
-
success: false,
|
|
123
|
-
message: "Username is required"
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
const user = await getDb().collection("users").findOne({
|
|
127
|
-
username: username
|
|
128
|
-
});
|
|
129
|
-
if (!user) {
|
|
130
|
-
return res.status(404).json({
|
|
131
|
-
success: false,
|
|
132
|
-
message: "User not found."
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
const jwt = require('jsonwebtoken');
|
|
136
|
-
const resetPayload = {
|
|
137
|
-
userId: user._id.toString(),
|
|
138
|
-
type: 'reset',
|
|
139
|
-
iat: Math.floor(Date.now() / 1000),
|
|
140
|
-
exp: Math.floor(Date.now() / 1000) + 60 * 60
|
|
141
|
-
};
|
|
142
|
-
const resetToken = jwt.sign(resetPayload, config.jwtToken);
|
|
143
|
-
await getDb().collection("users").updateOne({
|
|
144
|
-
_id: user._id
|
|
145
|
-
}, {
|
|
146
|
-
$set: {
|
|
147
|
-
resetToken: resetToken,
|
|
148
|
-
resetTokenExpiry: new Date(Date.now() + 3600000)
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
return res.status(200).json({
|
|
152
|
-
success: true,
|
|
153
|
-
message: "Password reset token generated successfully",
|
|
154
|
-
resetToken: resetToken
|
|
155
|
-
});
|
|
156
|
-
} catch (error) {
|
|
157
|
-
console.error("Error in forgot password:", error);
|
|
158
|
-
return res.status(500).json({
|
|
159
|
-
success: false,
|
|
160
|
-
message: "Failed to process forgot password request."
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// Reset Password
|
|
166
|
-
router.post("/reset-password", async (req, res) => {
|
|
167
|
-
const {
|
|
168
|
-
resetToken,
|
|
169
|
-
newPassword
|
|
170
|
-
} = req.body;
|
|
171
|
-
try {
|
|
172
|
-
if (!resetToken || !newPassword) {
|
|
173
|
-
return res.status(400).json({
|
|
174
|
-
success: false,
|
|
175
|
-
message: "Reset token and new password are required"
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
const jwt = require('jsonwebtoken');
|
|
179
|
-
let decoded;
|
|
180
|
-
try {
|
|
181
|
-
decoded = jwt.verify(resetToken, config.jwtToken);
|
|
182
|
-
} catch (jwtError) {
|
|
183
|
-
return res.status(401).json({
|
|
184
|
-
success: false,
|
|
185
|
-
message: "Invalid or expired reset token"
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
if (!decoded || decoded.type !== 'reset' || !decoded.userId) {
|
|
189
|
-
return res.status(401).json({
|
|
190
|
-
success: false,
|
|
191
|
-
message: "Invalid reset token type or missing user ID"
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
const user = await getDb().collection("users").findOne({
|
|
195
|
-
_id: new ObjectId(decoded.userId),
|
|
196
|
-
resetToken: resetToken,
|
|
197
|
-
resetTokenExpiry: {
|
|
198
|
-
$gt: new Date()
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
if (!user) {
|
|
202
|
-
return res.status(401).json({
|
|
203
|
-
success: false,
|
|
204
|
-
message: "Invalid or expired reset token."
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// Hash the new password
|
|
209
|
-
const saltRounds = 10;
|
|
210
|
-
const hashedPassword = await bcrypt.hash(newPassword, saltRounds);
|
|
211
|
-
await getDb().collection("users").updateOne({
|
|
212
|
-
_id: user._id
|
|
213
|
-
}, {
|
|
214
|
-
$set: {
|
|
215
|
-
password: hashedPassword
|
|
216
|
-
},
|
|
217
|
-
$unset: {
|
|
218
|
-
resetToken: "",
|
|
219
|
-
resetTokenExpiry: ""
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
return res.status(200).json({
|
|
223
|
-
success: true,
|
|
224
|
-
message: "Password reset successfully"
|
|
225
|
-
});
|
|
226
|
-
} catch (error) {
|
|
227
|
-
console.error("Error resetting password:", error);
|
|
228
|
-
return res.status(500).json({
|
|
229
|
-
success: false,
|
|
230
|
-
message: "Failed to reset password."
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
module.exports = router;
|
package/dist/admin/blogs.js
DELETED
|
@@ -1,94 +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
|
-
router.post('/', async (req, res) => {
|
|
9
|
-
const {
|
|
10
|
-
projectId
|
|
11
|
-
} = req.query;
|
|
12
|
-
const {
|
|
13
|
-
title,
|
|
14
|
-
author,
|
|
15
|
-
date,
|
|
16
|
-
description,
|
|
17
|
-
tags,
|
|
18
|
-
imageUrl
|
|
19
|
-
} = req.body;
|
|
20
|
-
if (!projectId || !title || !author || !date || !description) {
|
|
21
|
-
return res.status(400).json({
|
|
22
|
-
success: false,
|
|
23
|
-
message: 'projectId, title, author, date,and description are required.'
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
const blog = {
|
|
27
|
-
title,
|
|
28
|
-
author,
|
|
29
|
-
date,
|
|
30
|
-
description,
|
|
31
|
-
tags: tags || '',
|
|
32
|
-
imageUrl,
|
|
33
|
-
projectId,
|
|
34
|
-
createdAt: new Date()
|
|
35
|
-
};
|
|
36
|
-
try {
|
|
37
|
-
const result = await getDb().collection('blogs').insertOne(blog);
|
|
38
|
-
if (result && result.insertedId) {
|
|
39
|
-
return res.status(201).json({
|
|
40
|
-
success: true,
|
|
41
|
-
message: 'Blog created successfully.',
|
|
42
|
-
blogId: result.insertedId,
|
|
43
|
-
blog
|
|
44
|
-
});
|
|
45
|
-
} else {
|
|
46
|
-
return res.status(500).json({
|
|
47
|
-
success: false,
|
|
48
|
-
message: 'Blog could not be created.'
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
} catch (error) {
|
|
52
|
-
console.error('Error while creating blog:', error);
|
|
53
|
-
return res.status(500).json({
|
|
54
|
-
success: false,
|
|
55
|
-
message: 'Failed to create blog due to a server error.'
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
router.get('/', async (req, res) => {
|
|
60
|
-
const {
|
|
61
|
-
projectId,
|
|
62
|
-
contentId,
|
|
63
|
-
userId
|
|
64
|
-
} = req.query;
|
|
65
|
-
if (!projectId) {
|
|
66
|
-
return res.status(400).json({
|
|
67
|
-
success: false,
|
|
68
|
-
message: 'projectId is required in query.'
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
const query = {
|
|
73
|
-
projectId
|
|
74
|
-
};
|
|
75
|
-
if (contentId) {
|
|
76
|
-
query.contentId = contentId;
|
|
77
|
-
}
|
|
78
|
-
if (userId) {
|
|
79
|
-
query.author = userId;
|
|
80
|
-
}
|
|
81
|
-
const blogs = await getDb().collection('blogs').find(query).toArray();
|
|
82
|
-
return res.status(200).json({
|
|
83
|
-
success: true,
|
|
84
|
-
blogs: blogs
|
|
85
|
-
});
|
|
86
|
-
} catch (error) {
|
|
87
|
-
console.error('Error fetching blogs:', error);
|
|
88
|
-
return res.status(500).json({
|
|
89
|
-
success: false,
|
|
90
|
-
message: 'Failed to fetch blogs.'
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
module.exports = router;
|
package/dist/admin/comments.js
DELETED
|
@@ -1,83 +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 comments
|
|
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 commentData = await getDb().collection("comments").find(query).toArray();
|
|
24
|
-
if (!commentData || commentData.length === 0) {
|
|
25
|
-
console.log("Data not found.");
|
|
26
|
-
return res.status(200).json({
|
|
27
|
-
success: true,
|
|
28
|
-
comments: []
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return res.status(200).json({
|
|
32
|
-
success: true,
|
|
33
|
-
comments: commentData
|
|
34
|
-
});
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.error("Error retrieving comments:", error);
|
|
37
|
-
return res.status(500).json({
|
|
38
|
-
success: false,
|
|
39
|
-
message: "Failed to retrieve comments."
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// Add comment
|
|
45
|
-
router.post("/", async (req, res) => {
|
|
46
|
-
const {
|
|
47
|
-
projectId,
|
|
48
|
-
contentId,
|
|
49
|
-
comment,
|
|
50
|
-
...customFields
|
|
51
|
-
} = req.body;
|
|
52
|
-
const commentData = {
|
|
53
|
-
projectId,
|
|
54
|
-
contentId,
|
|
55
|
-
comment,
|
|
56
|
-
...customFields,
|
|
57
|
-
createdAt: new Date()
|
|
58
|
-
};
|
|
59
|
-
try {
|
|
60
|
-
const result = await getDb().collection("comments").insertOne(commentData);
|
|
61
|
-
if (result && result.insertedId) {
|
|
62
|
-
console.log("Comment added with ID:", result.insertedId);
|
|
63
|
-
return res.status(200).json({
|
|
64
|
-
success: true,
|
|
65
|
-
message: "Comment added successfully.",
|
|
66
|
-
commentId: result.insertedId
|
|
67
|
-
});
|
|
68
|
-
} else {
|
|
69
|
-
console.error("Insert operation failed. Result:", result);
|
|
70
|
-
return res.status(500).json({
|
|
71
|
-
success: false,
|
|
72
|
-
message: "Comment could not be added."
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
} catch (error) {
|
|
76
|
-
console.error("Error adding comment:", error);
|
|
77
|
-
return res.status(500).json({
|
|
78
|
-
success: false,
|
|
79
|
-
message: "Failed to add comment due to a server error."
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
module.exports = router;
|
package/dist/admin/files.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const express = require('express');
|
|
4
|
-
const multer = require('multer');
|
|
5
|
-
// const { uploadToGCS, bucket } = require('../uploadToGCS')
|
|
6
|
-
const {
|
|
7
|
-
bucket,
|
|
8
|
-
uploadToGCS,
|
|
9
|
-
bucketName
|
|
10
|
-
} = require('../uploadToGCS.js');
|
|
11
|
-
// const uploadToGCS = require('../uploadToGCS.js')
|
|
12
|
-
|
|
13
|
-
const router = express.Router();
|
|
14
|
-
const upload = multer();
|
|
15
|
-
router.post('/', upload.single('file'), async (req, res) => {
|
|
16
|
-
try {
|
|
17
|
-
if (!req.file) {
|
|
18
|
-
return res.status(400).json({
|
|
19
|
-
status: 'error',
|
|
20
|
-
message: 'No file uploaded'
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
const url = await uploadToGCS(req.file);
|
|
24
|
-
return res.status(200).json({
|
|
25
|
-
status: 'success',
|
|
26
|
-
message: 'File uploaded successfully',
|
|
27
|
-
url
|
|
28
|
-
});
|
|
29
|
-
} catch (err) {
|
|
30
|
-
console.error('Error uploading file:', err);
|
|
31
|
-
return res.status(500).json({
|
|
32
|
-
status: 'error',
|
|
33
|
-
message: 'File upload failed',
|
|
34
|
-
error: err.message || 'Unknown error occurred'
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
router.get('/', async (req, res) => {
|
|
39
|
-
try {
|
|
40
|
-
const [files] = await bucket.getFiles();
|
|
41
|
-
const bucketName = bucket.name;
|
|
42
|
-
const imageUrls = files.map(file => `https://storage.googleapis.com/${bucketName}/${file.name}`);
|
|
43
|
-
return res.status(200).json({
|
|
44
|
-
message: 'Images fetched successfully',
|
|
45
|
-
images: imageUrls
|
|
46
|
-
});
|
|
47
|
-
} catch (err) {
|
|
48
|
-
console.error('Error listing files from GCS:', err);
|
|
49
|
-
return res.status(500).json({
|
|
50
|
-
status: 'error',
|
|
51
|
-
message: 'Failed to fetch images',
|
|
52
|
-
error: err.message || 'Unknown error occurred'
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
module.exports = router;
|