155 lines
3.7 KiB
TypeScript
155 lines
3.7 KiB
TypeScript
import express, { Request, Response } from 'express';
|
|
import { client } from '../app';
|
|
import { isLoggedInAPI } from '../util/guard';
|
|
import { logger } from '../util/logger';
|
|
|
|
export const commentRoutes = express.Router();
|
|
|
|
commentRoutes.get('/', isLoggedInAPI, getComment);
|
|
commentRoutes.post('/', isLoggedInAPI, postComment);
|
|
commentRoutes.put('/', isLoggedInAPI, checkedComment);
|
|
|
|
async function getComment(req: Request, res: Response) {
|
|
try {
|
|
logger.debug('Before reading DB');
|
|
const userId = req.session.user;
|
|
|
|
const events = (
|
|
await client.query(
|
|
`
|
|
SELECT * from events
|
|
JOIN participants ON participants.event_id = events.id
|
|
WHERE participants.user_id = $1
|
|
`,
|
|
[userId]
|
|
)
|
|
).rows;
|
|
|
|
const participantComment = (
|
|
await client.query(
|
|
`
|
|
SELECT comments.id, comments.event_id, comments.content, comments.created_at, events.name, users.first_name, users.last_name, comments.read, comments.anonymous FROM participants
|
|
JOIN events ON participants.event_id = events.id
|
|
JOIN comments ON events.id = comments.event_id
|
|
JOIN users on participants.user_id = users.id
|
|
WHERE participants.user_id = $1
|
|
ORDER BY comments.created_at Desc,
|
|
comments.read Asc
|
|
`,
|
|
[userId]
|
|
)
|
|
).rows;
|
|
|
|
const creatorComment = (
|
|
await client.query(
|
|
`
|
|
SELECT comments.read, comments.anonymous, comments.id, comments.event_id, comments.content, comments.created_at, events.name, users.first_name, users.last_name FROM comments
|
|
JOIN events ON events.id = comments.event_id
|
|
JOIN users ON comments.user_id =users.id
|
|
WHERE events.creator_id = $1
|
|
ORDER BY comments.created_at Desc,
|
|
comments.read Asc
|
|
`,
|
|
[userId]
|
|
)
|
|
).rows;
|
|
|
|
res.json({
|
|
status: true,
|
|
events: events,
|
|
pComment: participantComment,
|
|
cComment: creatorComment
|
|
});
|
|
// 唔好用簡寫
|
|
} catch (e) {
|
|
logger.error(e);
|
|
res.status(500).json({
|
|
msg: '[CMT001]: Failed to get Comment'
|
|
});
|
|
}
|
|
}
|
|
|
|
async function postComment(req: Request, res: Response) {
|
|
try {
|
|
logger.debug('Before reading DB');
|
|
const userId = req.session.user;
|
|
const eventId = parseInt(req.body.receiver);
|
|
const category = req.body.category;
|
|
const comment = req.body.comment;
|
|
const anonymous = req.body.anonymous;
|
|
|
|
await client.query(
|
|
`
|
|
INSERT INTO comments
|
|
(user_id, event_id, category, content, anonymous, created_at, updated_at)
|
|
VALUES ($1, $2, $3, $4, $5, NOW(), NOW())
|
|
|
|
`,
|
|
[userId, eventId, category, comment, anonymous]
|
|
);
|
|
|
|
res.json({
|
|
status: true,
|
|
msg: 'comment sent successfully'
|
|
});
|
|
} catch (e) {
|
|
logger.error(e);
|
|
res.status(500).json({
|
|
msg: '[MSG001]: Failed to send Comment'
|
|
});
|
|
}
|
|
}
|
|
|
|
async function checkedComment(req: Request, res: Response) {
|
|
try {
|
|
logger.debug('Before reading DB');
|
|
const userId = req.session.user;
|
|
const commentId = parseInt(req.body.commentId);
|
|
const eventId = req.body.eventId;
|
|
const read = req.body.check;
|
|
|
|
let isCreator = true;
|
|
|
|
const creatorEvent = (
|
|
await client.query(
|
|
`
|
|
SELECT creator_id FROM events
|
|
WHERE id = $1
|
|
`,
|
|
[eventId]
|
|
)
|
|
).rows[0];
|
|
|
|
if (creatorEvent.creator_id !== userId) {
|
|
isCreator = false;
|
|
}
|
|
|
|
if (isCreator) {
|
|
await client.query(
|
|
`
|
|
UPDATE comments
|
|
SET read = $1,
|
|
updated_at = $2
|
|
WHERE id = $3
|
|
`,
|
|
[read, 'now()', commentId]
|
|
);
|
|
|
|
res.json({
|
|
status: true,
|
|
msg: 'Checked/Unchecked'
|
|
});
|
|
} else {
|
|
res.status(400).json({
|
|
status: false,
|
|
msg: 'Unauthorized Request'
|
|
});
|
|
}
|
|
} catch (e) {
|
|
logger.error(e);
|
|
res.status(500).json({
|
|
msg: '[MSG002]: Failed to edit Comment'
|
|
});
|
|
}
|
|
}
|