Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
"extends": "standard"
};
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

360 changes: 357 additions & 3 deletions src/routes/events.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,360 @@
import { Application } from "express";
import { Application, Request, Response } from "express";
import * as db from "../tools/db";

export const register = (app: Application) => {
const todo = true;
};
/* /events endpoint */

// Get method (get all events (filter by category, location, time))
app.get('/api/v1/events', (req: Request, res: Response) => {
const filter_by = req.body.filter_by;
const value_filter = req.body.value_filter; // for category and location
// for time
const start_time = req.body.start_time;
const end_time = req.body.end_time;

if (filter_by === 'category') {
const sql = `
SELECT * FROM Event
INNER JOIN EventCategory ON
EventCategory.evcat_id = Event.evcat_id
WHERE EventCategory.title = ?`;

db.connection.query(sql, [value_filter], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
"events": results
});
});
}
else if (filter_by === 'location') {
const sql = `
SELECT * FROM Event
INNER JOIN Location ON
Location.location_id = Event.location_id
WHERE Location.title = ?`;

db.connection.query(sql, [value_filter], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
"events": results
});
});
}
else if (filter_by === 'time') {
const sql = `
SELECT * FROM Event
INNER JOIN OneTimeEvent ON
OneTimeEvent.event_id = Event.event_id
WHERE OneTimeEvent.start_time >= ? AND OneTimeEvent.end_time <= ?;

SELECT * FROM Event
INNER JOIN RecurringEvent ON
RecurringEvent.event_id = Event.event_id
INNER JOIN RecurringSingleEvent ON
RecurringSingleEvent.recurringevent_id = RecurringEvent.recurringevent_id
WHERE RecurringSingleEvent.start_time >= ? AND RecurringSingleEvent.end_time <= ?;`;

db.connection.query(sql, [start_time, end_time, start_time, end_time],
(error, results, fields) => {
if (error) {
return res.sendStatus(500);
}

return res.send({
"events": results[0].concat(results[1])
});
});
}
else {
const sql = `SELECT * FROM Event`;

db.connection.query(sql, (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
"events": results
});
});
}
});

// Post method (create new event)
app.post("/api/v1/events", (req: Request, res: Response) => {
const title = req.body.title;
const max_capacity = req.body.max_capacity;
const content = req.body.content;
const ugid = req.body.ugid;
const lid = req.body.lid;
const evcat_id = req.body.evcat_id;

if (!title || !ugid || !lid || !evcat_id) {
return res.sendStatus(400);
}

const sql = `INSERT INTO Event (title, public, max_capacity, content,
usergroup_id, location_id, evcat_id) VALUES(?, ?, ?, ?, ?, ?, ?)`;
db.connection.query(sql, [title, 1, max_capacity, content, ugid, lid, evcat_id],
(error, results, fields) => {

if (error) {
return res.sendStatus(500);
}
return res.sendStatus(201);
});
});

/* /events/:evid */

// Get method (can be single, recurring single or recurring (?) event)
// get specific event
app.get("/api/v1/events/:evid", (req: Request, res: Response) => {
const evid = req.params.evid;
if (!evid) {
return res.sendStatus(400);
}

const sql = `
SELECT * FROM OneTimeEvent
WHERE event_id = ?;
SELECT * FROM RecurringEvent
INNER JOIN RecurringSingleEvent ON
RecurringSingleEvent.recurringevent_id = RecurringEvent.recurringevent_id
WHERE RecurringEvent.event_id = ?`;

db.connection.query(sql, [evid, evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}

return res.send({
OneTimeEvent: results[0],
RecurringEvent: results[1],
});
});
});

// Put method (update existing event)
app.put("/api/v1/events/:evid", (req: Request, res: Response) => {
const evid = req.params.evid;
const title = req.body.title;
const max_capacity = req.body.max_capacity;
const content = req.body.content;
const ugid = req.body.ugid;
const lid = req.body.lid;
const evcat_id = req.body.evcat_id;
if (!evid || !title || !max_capacity || !content
|| !ugid || !lid || !evcat_id) {
return res.sendStatus(400);
}

const sql = `
UPDATE Event
SET title = ?, max_capacity = ?, content = ?,
usergroup_id = ?, usergroup_id = ?, evcat_id = ?
WHERE event_id = ?`;
db.connection.query(sql, [title, max_capacity, content,
ugid, lid, evcat_id, evid], (error, results, fields) => {

if (error) {
return res.sendStatus(500);
}

return res.sendStatus(200);
});
});

// Delete Method (remove existing event)
app.delete("/api/v1/events/:evid", (req: Request, res: Response) => {
const evid = req.params.evid;
if (!evid) {
return res.sendStatus(400);
}

const sql = `DELETE FROM Event
WHERE event_id = ?`;
db.connection.query(sql, [evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.sendStatus(200);
});
});

/* /events/:evid/invited */

// Get method (get users that are invited to the event)
app.get("/api/v1/events/:evid/invited", (req: Request, res: Response) => {
const evid = req.params.evid;
if (!evid) {
return res.sendStatus(400);
}

const sql = `SELECT * FROM User
INNER JOIN Invite ON
Invite.user_id = User.user_id
INNER JOIN EventInvite ON
EventInvite.invite_id = Invite.invite_id
WHERE EventInvite.event_id = ?`;

db.connection.query(sql, [evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
invited: results,
});
});
});

// Post method (invite user to event)
app.post("/api/v1/events/:evid/invited", (req: Request, res: Response) => {
const evid = req.params.evid;
const uid = req.body.uid;
const message = req.body.message || "You have been invited to an event";
if (!evid || !uid) {
return res.sendStatus(400);
}

// create new Invite
const sql = `
INSERT INTO Invite (user_id, message)
VALUES(?, ?);
INSERT INTO EventInvite(invite_id, event_id)
SELECT Invite.invite_id, ? FROM Invite
WHERE Invite.user_id = ?; `;

db.connection.query(sql, [uid, message, evid, uid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.sendStatus(201);
});
});

/* /events/:evid/confirmed */

// Get method (get users that are attending event)
app.get("/api/v1/events/:evid/confirmed", (req: Request, res: Response) => {
const evid = req.params.evid;
if (!evid) {
return res.sendStatus(400);
}

const sql = `
(SELECT * FROM User
INNER JOIN SingularAttendance ON
SingularAttendance.user_id = User.user_id
WHERE SingularAttendance.event_id = ?)
UNION ALL
(SELECT * FROM User
INNER JOIN RecurringAttendance ON
RecurringAttendance.user_id = User.user_id
WHERE RecurringAttendance.event_id = ?)`;
db.connection.query(sql, [evid, evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
users: results,
});
});
});

/* /events/:evid/requested */

// Get method (get users that requested to join event)
app.get("/api/v1/events/:evid/requested", (req: Request, res: Response) => {
const evid = req.params.evid;
if (!evid) {
return res.sendStatus(400);
}

const sql = `SELECT * FROM User
INNER JOIN Request ON
Request.user_id = User.user_id
INNER JOIN EventRequest ON
EventRequest.request_id = Request.request_id
WHERE EventRequest.event_id = ?`;

db.connection.query(sql, [evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
requested: results,
});
});
});

// Post method (request to join event)
app.post("/api/v1/events/:evid/requested", (req: Request, res: Response) => {
const evid = req.params.evid;
const uid = req.body.uid;
const message = req.body.message || "You have requested to join the event";
if (!evid || !uid) {
return res.sendStatus(400);
}

// create new Request
const sql = `
INSERT INTO Request (user_id, message)
VALUES(?, ?);
INSERT INTO EventRequest(request_id, event_id)
SELECT Request.request_id, ? FROM Request
WHERE Request.user_id = ?; `;

db.connection.query(sql, [uid, message, evid, uid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.sendStatus(201);
});
});

/* /events/:evid/organizing */

// Get method (get event organizers)
app.get("/api/v1/events/:evid/organizing", (req: Request, res: Response) => {
const evid = req.params.evid;
if (!evid) {
return res.sendStatus(400);
}

const sql = `
SELECT * FROM User
INNER JOIN Organizer ON
Organizer.user_id = User.user_id
WHERE Organizer.event_id = ?`;
db.connection.query(sql, [evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.send({
organizers: results,
});
});
});

// Post method (add event organizer)
app.post("/api/v1/events/:evid/organizing", (req: Request, res: Response) => {
const evid = req.params.evid;
const uid = req.body.uid;
if (!evid || !uid) {
return res.sendStatus(400);
}

const sql = `INSERT INTO Organizer (user_id, event_id)
VALUES(?, ?)`;
db.connection.query(sql, [uid, evid], (error, results, fields) => {
if (error) {
return res.sendStatus(500);
}
return res.sendStatus(201);
});
});
};
Loading