This commit is contained in:
louiscklaw
2025-01-31 19:15:17 +08:00
parent 09adae8c8e
commit 6c60a73f30
1546 changed files with 286918 additions and 0 deletions

View File

@@ -0,0 +1,251 @@
import express, { Request, Response } from 'express';
import { client } from '../app';
import { logger } from '../util/logger';
import crypto from 'crypto';
export const eventDetailsRoutes = express.Router();
eventDetailsRoutes.get('/created/:id', getCreatedEventDetails);
eventDetailsRoutes.get('/participated/:id', getParticipatedEventDetails);
eventDetailsRoutes.get('/invitation/:id', getInvitationLink);
eventDetailsRoutes.put('/datetime/:id', updateDateTime);
eventDetailsRoutes.put('/venue/:id', updateVenue);
async function getCreatedEventDetails(req: Request, res: Response) {
try {
logger.debug('Before reading DB');
const eventId = req.params.id;
const [event] = (
await client.query(
`
SELECT * FROM events
WHERE id = $1
AND creator_id = $2;
`,
[parseInt(eventId), req.session.user]
)
).rows;
if (event) {
const [creatorDetail] = (
await client.query(
`
SELECT * FROM users
WHERE id = $1;
`,
[req.session.user]
)
).rows;
const participantList = (
await client.query(
`
SELECT users.id, users.first_name, users.last_name FROM users
INNER JOIN participants ON participants.user_id = users.id
INNER JOIN events ON participants.event_id = events.id
WHERE events.id = $1;
`,
[parseInt(eventId)]
)
).rows;
res.json({
status: true,
creator: {
id: creatorDetail.id,
first_name: creatorDetail.first_name,
last_name: creatorDetail.last_name
},
detail: event,
participants: participantList
});
} else {
res.json({
status: false
});
}
} catch (e) {
logger.error(e);
res.status(500).json({
msg: '[ETD001]: Failed to get Created Event Details'
});
}
}
async function getParticipatedEventDetails(req: Request, res: Response) {
try {
logger.debug('Before reading DB');
const eventId = req.params.id;
/*
events
INNER join users as creator on events.creator_id = users.id
INNER JOIN participants on ON participants.event_id = events.id
INNER JOIN users ON participants.user_id = users.id
*/
const [event] = (
await client.query(
`
SELECT events.* FROM events
INNER JOIN participants ON participants.event_id = events.id
INNER JOIN users ON participants.user_id = users.id
WHERE events.id = $1 AND users.id = $2;
`,
[parseInt(eventId), req.session.user]
)
).rows;
if (event) {
const [creatorDetail] = (
await client.query(
`
SELECT * FROM users
INNER JOIN events ON events.creator_id = users.id
WHERE events.id = $1;
`,
[parseInt(eventId)]
)
).rows;
const participantList = (
await client.query(
`
SELECT users.id, users.first_name, users.last_name FROM users
INNER JOIN participants ON participants.user_id = users.id
INNER JOIN events ON participants.event_id = events.id
WHERE events.id = $1;
`,
[parseInt(eventId)]
)
).rows;
res.json({
status: true,
creator: {
id: creatorDetail.id,
first_name: creatorDetail.first_name,
last_name: creatorDetail.last_name
},
detail: event,
participants: participantList
});
} else {
res.json({
status: false
});
}
} catch (e) {
logger.error(e);
res.status(500).json({
msg: '[ETD002]: Failed to get Participated Event Details'
});
}
}
async function getInvitationLink(req: Request, res: Response) {
try {
logger.debug('Before reading DB');
const eventId = req.params.id;
const [event] = (
await client.query(
`
SELECT * FROM events
WHERE id = $1
AND creator_id = $2;
`,
[parseInt(eventId), req.session.user]
)
).rows;
if (event) {
const invitation_token = crypto.randomBytes(64).toString('hex');
await client.query(
`
UPDATE events SET invitation_token = $1, updated_at = CURRENT_TIMESTAMP WHERE id = $2;
`,
[invitation_token, parseInt(eventId)]
);
res.json({
status: true,
invitation_token
});
} else {
res.json({ status: false });
}
} catch (e) {
logger.error(e);
res.status(500).json({
msg: '[ETD005]: Failed to copy invitation link'
});
}
}
async function updateDateTime(req: Request, res: Response) {
try {
logger.debug('Before reading DB');
const eventId = req.params.id;
// CORRECT
const [event] = (
await client.query(
`
SELECT * FROM events
WHERE id = $1
AND creator_id = $2;
`,
[parseInt(eventId), req.session.user]
)
).rows;
if (event) {
await client.query(
`
UPDATE events
SET start_datetime = $1, end_datetime = $2, updated_at = CURRENT_TIMESTAMP
WHERE id = $3;
`,
[req.body.startTime, req.body.endTime, parseInt(eventId)]
);
res.json({ status: true });
} else {
res.json({ status: false });
}
} catch (e) {
logger.error(e);
res.status(500).json({
msg: '[ETD003]: Failed to update date/time'
});
}
}
async function updateVenue(req: Request, res: Response) {
try {
logger.debug('Before reading DB');
const eventId = req.params.id;
const [event] = (
await client.query(
`
SELECT * FROM events
WHERE id = $1
AND creator_id = $2;
`,
[parseInt(eventId), req.session.user]
)
).rows;
if (event) {
await client.query(
`
UPDATE events
SET venue = $1, updated_at = CURRENT_TIMESTAMP
WHERE id = $2;
`,
[req.body.venue, parseInt(eventId)]
);
res.json({ status: true });
} else {
res.json({ status: false });
}
} catch (e) {
logger.error(e);
res.status(500).json({
msg: '[ETD004]: Failed to update venue'
});
}
}