Skip to content

Commit a18ce54

Browse files
Merge pull request #53 from Capstone-C2SE02-TI/TASK60-REPLY-COMMENT
TASK60-REPLY-COMMENT
2 parents 6191d76 + c8866af commit a18ce54

File tree

8 files changed

+3502
-563
lines changed

8 files changed

+3502
-563
lines changed

package-lock.json

Lines changed: 3403 additions & 548 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
"nedb": "^1.8.0",
4040
"nodemailer": "^6.9.1",
4141
"nodemon": "^2.0.21",
42-
"pusher": "^5.1.2",
4342
"swagger-jsdoc": "^6.2.8",
4443
"swagger-ui-express": "^4.6.2",
4544
"tulind": "^0.8.20",

src/controllers/Blog.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ function BlogController() {
1212

1313
createdBlogs
1414
? res.status(200).json({
15-
message: "Successfully",
15+
message: "successfully",
1616
data: createdBlogs,
1717
error: null
1818
})
1919
: res.status(400).json({
20-
message: "Failed",
20+
message: "failed",
2121
data: null,
2222
error: null
2323
});
@@ -29,12 +29,12 @@ function BlogController() {
2929

3030
createdBlog
3131
? res.status(200).json({
32-
message: "Successfully",
32+
message: "successfully",
3333
data: createdBlog,
3434
error: null
3535
})
3636
: res.status(400).json({
37-
message: "Failed",
37+
message: "failed",
3838
data: null,
3939
error: null
4040
});
@@ -49,12 +49,12 @@ function BlogController() {
4949

5050
blogs
5151
? res.status(200).json({
52-
message: "Successfully",
52+
message: "successfully",
5353
data: blogs,
5454
error: null
5555
})
5656
: res.status(400).json({
57-
message: "Failed",
57+
message: "failed",
5858
data: null,
5959
error: null
6060
});
@@ -66,12 +66,12 @@ function BlogController() {
6666

6767
blog
6868
? res.status(200).json({
69-
message: "Successfully",
69+
message: "successfully",
7070
data: blog,
7171
error: null
7272
})
7373
: res.status(400).json({
74-
message: "Failed",
74+
message: "failed",
7575
data: null,
7676
error: null
7777
});

src/controllers/Comment.js

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
getCommentList,
3-
createComment
3+
createComment,
4+
replyComment
45
} from "../services/crudDatabase/comment.js";
56

67
function CommentController() {
@@ -9,12 +10,12 @@ function CommentController() {
910
const commentList = await getCommentList(blogId);
1011
commentList
1112
? res.status(200).json({
12-
message: "Successfully",
13+
message: "successfully",
1314
data: commentList,
1415
error: null
1516
})
1617
: res.status(400).json({
17-
message: "Failed",
18+
message: "failed",
1819
data: null,
1920
error: error
2021
});
@@ -24,12 +25,27 @@ function CommentController() {
2425
const comment = await createComment(req.body);
2526
comment
2627
? res.status(200).json({
27-
message: "Successfully",
28+
message: "successfully",
2829
data: comment,
2930
error: null
3031
})
3132
: res.status(400).json({
32-
message: "Failed",
33+
message: "failed",
34+
data: null,
35+
error: error
36+
});
37+
};
38+
39+
this.replyComment = async (req, res, next) => {
40+
const comment = await replyComment(req.body);
41+
comment
42+
? res.status(200).json({
43+
message: "successfully",
44+
data: comment,
45+
error: null
46+
})
47+
: res.status(400).json({
48+
message: "failed",
3349
data: null,
3450
error: error
3551
});

src/models/Comment.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ const CommentSchema = new mongoose.Schema(
2929
type: String,
3030
trim: true,
3131
required: true
32+
},
33+
children: {
34+
type: Array,
35+
default: []
3236
}
3337
},
3438
{ timestamps: true, versionKey: false }

src/routes/comment.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ import CommentController from "../controllers/Comment.js";
44

55
router.get("/list", CommentController.getCommentList);
66
router.post("/create", CommentController.createComment);
7+
router.post("/reply", CommentController.replyComment);
78

89
export default router;

src/services/crudDatabase/comment.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,38 @@ export const createComment = async ({ blogId, userId, content }) => {
1414
userWalletAddress: userInfo.walletAddress,
1515
userAvatar: userInfo.avatar,
1616
userFullName: userInfo.fullName,
17-
content: content
17+
content: content,
18+
children: []
1819
};
1920
const createdComment = await CommentModel.create(newComment);
2021
return createdComment;
2122
};
23+
24+
export const replyComment = async ({
25+
blogId,
26+
userId,
27+
content,
28+
parentCommentId
29+
}) => {
30+
const userInfo = await UserModel.findOne({ _id: userId });
31+
const comment = await CommentModel.findOne({ _id: parentCommentId });
32+
if (comment) {
33+
const newComment = {
34+
blogId: blogId,
35+
userId: userId,
36+
userWalletAddress: userInfo.walletAddress,
37+
userAvatar: userInfo.avatar,
38+
userFullName: userInfo.fullName,
39+
content: content,
40+
children: null,
41+
createdAt: new Date()
42+
};
43+
return await CommentModel.findOneAndUpdate(
44+
{ _id: parentCommentId },
45+
{ children: [...comment.children, newComment] },
46+
{ new: true }
47+
);
48+
} else {
49+
return false;
50+
}
51+
};

src/swaggers/comment.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,37 @@
4646
description: Successfully
4747
400:
4848
description: Failed
49+
50+
/comment/reply:
51+
post:
52+
summary: Reply comment
53+
tags:
54+
- Comments
55+
requestBody:
56+
content:
57+
application/json:
58+
schema:
59+
type: object
60+
properties:
61+
blogId:
62+
type: String
63+
required: true
64+
userId:
65+
type: String
66+
required: true
67+
content:
68+
type: string
69+
required: true
70+
parentCommentId:
71+
type: string
72+
required: false
73+
example:
74+
blogId: "64325f973f4e558a06a58e26"
75+
userId: "0x...."
76+
content: "Bài viết quá hay !!"
77+
parentCommentId: "64325f973f4e558a06a58e26"
78+
responses:
79+
200:
80+
description: Successfully
81+
400:
82+
description: Failed

0 commit comments

Comments
 (0)