Skip to content

Commit e634609

Browse files
authored
Merge pull request #125 from Turing-Sandbox/SUMMA-16
SUMMA-16: CommentService Frontend implementation
2 parents cef4406 + 162167f commit e634609

35 files changed

Lines changed: 645 additions & 349 deletions

backend/src/app.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import path from "path";
99

1010
// Import routes
1111
import userRoutes from './modules/user/routes/user.routes';
12-
import commentRoutes from './modules/comment/routes/comment.routes';
1312
import contentRoutes from './modules/content/routes/content.routes';
1413
import subscriptionRoutes from './modules/subscription/routes/subscription.routes';
1514
import notificationRoutes from './modules/notification/routes/notification.routes';
@@ -53,7 +52,6 @@ app.get("/health", (req, res) => {
5352

5453
// API routes
5554
app.use("/user", userRoutes);
56-
app.use("/comment", commentRoutes);
5755
app.use("/content", contentRoutes);
5856
app.use("/subscription", subscriptionRoutes);
5957
app.use("/notification", notificationRoutes);

backend/src/modules/comment/controllers/comment.controller.ts

Lines changed: 0 additions & 105 deletions
This file was deleted.

backend/src/modules/comment/routes/comment.routes.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import {
2+
createComment,
3+
deleteComment,
4+
deletePost,
5+
getAllComments,
6+
getComment,
7+
updateComment,
8+
} from "../services/comment.service";
9+
import { ContentService } from "../services/content.service";
10+
import { Request, Response } from "express";
11+
import { getUser } from "../../user/services/user.service";
12+
13+
export async function createCommentController(
14+
req: Request,
15+
res: Response
16+
): Promise<void> {
17+
const { post_id } = req.params;
18+
const { owner_id, text } = req.body;
19+
try {
20+
const response = await getUser(owner_id);
21+
const creation = await createComment(
22+
post_id,
23+
owner_id,
24+
text,
25+
response?.username
26+
);
27+
res.status(201).json({ message: "Comment created successfully", creation });
28+
} catch (error) {
29+
console.log(error);
30+
console.log(post_id, owner_id, text);
31+
res.status(500).json({ error: error });
32+
}
33+
}
34+
35+
export async function getCommentByIdController(req: Request, res: Response) {
36+
const { post_id, comment_id } = req.params;
37+
try {
38+
const comment = await getComment(post_id, comment_id);
39+
console.log(comment);
40+
if (comment) res.status(200).json(comment);
41+
else res.status(404).json(null);
42+
} catch (error) {
43+
res.status(500).json({ error: "Failed to fetch comment" });
44+
console.log(error);
45+
}
46+
}
47+
48+
export async function updateCommentController(req: Request, res: Response) {
49+
const { post_id, comment_id, user_id } = req.params;
50+
const comment = await getComment(post_id, comment_id);
51+
if (comment?.owner_id == user_id) {
52+
const updatedComment = req.body;
53+
try {
54+
await updateComment(post_id, comment_id, updatedComment);
55+
res.status(200).json({ message: "Comment updated successfully" });
56+
} catch (error) {
57+
res.status(500).json({ error: "Failed to update comment" });
58+
console.log(error);
59+
}
60+
} else {
61+
res.status(401).json({ error: "You do not have permission to try this." });
62+
}
63+
}
64+
65+
export async function deleteCommentController(req: Request, res: Response) {
66+
const { post_id, comment_id, user_id } = req.params;
67+
const comment = await getComment(post_id, comment_id);
68+
if (comment?.owner_id == user_id) {
69+
try {
70+
await deleteComment(post_id, comment_id);
71+
res.status(200).json({ message: "Comment deleted successfully" });
72+
} catch (error) {
73+
res.status(500).json({ error: error });
74+
console.log(error);
75+
}
76+
} else {
77+
res.status(401).json({ error: "You do not have permission to try this." });
78+
}
79+
}
80+
81+
export async function deletePostController(req: Request, res: Response) {
82+
const { post_id, user_id } = req.params;
83+
const post = await ContentService.getContent(post_id);
84+
const creator_id = post?.creatorUID;
85+
if (creator_id == user_id) {
86+
try {
87+
await deletePost(post_id);
88+
res
89+
.status(200)
90+
.json({ message: "Post (entire comment tree) deleted successfully" });
91+
} catch (error) {
92+
res.status(500).json({ error: error + " " + post_id });
93+
console.log(error);
94+
}
95+
} else {
96+
res.status(401).json({ error: "You do not have permission to try this." });
97+
}
98+
}
99+
100+
export async function getCommentsByPostController(
101+
req: Request,
102+
res: Response
103+
): Promise<void> {
104+
const { post_id } = req.params;
105+
try {
106+
const comments = await getAllComments(post_id);
107+
108+
if (Object.keys(comments).length > 0) {
109+
res.status(200).json(comments);
110+
} else {
111+
res.status(200).json(null);
112+
}
113+
} catch (error) {
114+
console.error("Error fetching comments:", error);
115+
res.status(500).json({ error: "Failed to fetch comments" });
116+
console.log("GET ALL COMMENTS ERROR: ", error);
117+
}
118+
}
File renamed without changes.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { Router } from "express";
2+
import {
3+
updateCommentController,
4+
createCommentController,
5+
deleteCommentController,
6+
getCommentsByPostController,
7+
getCommentByIdController,
8+
} from "../controllers/comment.controller";
9+
import { authenticateToken } from "../../../shared/middleware/auth";
10+
11+
const commentRouter = Router();
12+
13+
// Post routes
14+
commentRouter.post(
15+
"/:contentId/comment",
16+
authenticateToken,
17+
createCommentController
18+
);
19+
20+
// Get routes
21+
commentRouter.get(
22+
"/:contentId/comments",
23+
authenticateToken,
24+
getCommentsByPostController
25+
);
26+
commentRouter.get(
27+
"/:contentId/comment/:commentId",
28+
authenticateToken,
29+
getCommentByIdController
30+
);
31+
32+
// Put routes
33+
commentRouter.put(
34+
"/:contentId/comment/:commentId",
35+
authenticateToken,
36+
updateCommentController
37+
);
38+
39+
// Delete routes
40+
commentRouter.delete(
41+
"/:contentId/comment/:commentId",
42+
authenticateToken,
43+
deleteCommentController
44+
);
45+
46+
export default commentRouter;

backend/src/modules/content/routes/content.routes.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
import { Router } from "express";
22
import { ContentController } from "../controllers/content.controller";
3+
import commentRouter from "./comment.routes";
34

45
const contentRoutes = Router();
56

67
contentRoutes.post("/", ContentController.createContent); // Create new content
78
contentRoutes.post("/uploadThumbnail", ContentController.uploadThumbnail); // Upload thumbnail
89

910
contentRoutes.get("/feed/trending", ContentController.getTrendingContent); // Get trending content
10-
contentRoutes.get("/feed/creators/:userId", ContentController.getRelatedContentCreators); // Get related content creators
11+
contentRoutes.get(
12+
"/feed/creators/:userId",
13+
ContentController.getRelatedContentCreators
14+
); // Get related content creators
1115
contentRoutes.get("/feed/:userId", ContentController.getPersonalizedContent); // Get personalized content
1216
contentRoutes.get("/related/:contentId", ContentController.getRelatedContent); // Get related content
1317

@@ -49,4 +53,6 @@ contentRoutes.post(
4953
ContentController.unshareContent
5054
); // Unshare content
5155

56+
contentRoutes.use("/", commentRouter);
57+
5258
export default contentRoutes;

backend/src/modules/comment/services/comment.service.ts renamed to backend/src/modules/content/services/comment.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ref, get, set, remove, update, child, push } from "firebase/database";
33
import { Comment } from "../models/comment.model";
44
import { pushNotification } from "../../notification/services/notification.service";
55
import { Notification } from "../../notification/models/notification.model";
6-
import { ContentService } from "../../content/services/content.service";
6+
import { ContentService } from "./content.service";
77

88
export async function createComment(
99
post_id: string,

0 commit comments

Comments
 (0)