Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import * as db from '../tools/db';
  2. import { Application, Request, Response } from "express";
  3.  
  4. export const register = (app: Application) => {
  5.     /* /events endpoint */
  6.  
  7.     // Get method (get all events (filter by category, location, time))
  8.     app.get('/api/v1/events', (req: Request, res: Response) => {
  9.         const filter_by = req.body.filter_by;
  10.         const value_filter = req.body.value_filter; // for category and location
  11.         // for time
  12.         const start_time = req.body.start_time;
  13.         const end_time = req.body.end_time;
  14.  
  15.         if (filter_by === 'category') {
  16.             const sql = `
  17.                 SELECT * FROM Event
  18.                 INNER JOIN EventCategory ON
  19.                 EventCategory.evcat_id = Event.evcat_id
  20.                 WHERE EventCategory.title = ?`;
  21.            
  22.             db.connection.query(sql, [value_filter], (error, results, fields) => {
  23.                 if (error) {
  24.                     return res.sendStatus(500);
  25.                 }
  26.                 return res.send({
  27.                     "events": results
  28.                 });
  29.             });
  30.         }
  31.         else if (filter_by === 'location') {
  32.             const sql = `
  33.                 SELECT * FROM Event
  34.                 INNER JOIN Location ON
  35.                 Location.location_id = Event.location_id
  36.                 WHERE Location.title = ?`;
  37.  
  38.             db.connection.query(sql, [value_filter], (error, results, fields) => {
  39.                 if (error) {
  40.                     return res.sendStatus(500);
  41.                 }
  42.                 return res.send({
  43.                     "events": results
  44.                 });
  45.             });
  46.         }
  47.         else if (filter_by === 'time') {
  48.             const sql = `
  49.                 SELECT * FROM Event
  50.                 INNER JOIN OneTimeEvent ON
  51.                 OneTimeEvent.event_id = Event.event_id
  52.                 WHERE OneTimeEvent.start_time >= ? AND OneTimeEvent.end_time <= ?;
  53.                
  54.                 SELECT * FROM Event
  55.                 INNER JOIN RecurringEvent ON
  56.                 RecurringEvent.event_id = Event.event_id
  57.                 INNER JOIN RecurringSingleEvent ON
  58.                 RecurringSingleEvent.recurringevent_id = RecurringEvent.recurringevent_id
  59.                 WHERE RecurringSingleEvent.start_time >= ? AND RecurringSingleEvent.end_time <= ?;`;
  60.  
  61.             db.connection.query(sql, [start_time, end_time, start_time, end_time],
  62.                 (error, results, fields) => {
  63.                 if (error) {
  64.                     return res.sendStatus(500);
  65.                 }
  66.  
  67.                 return res.send({
  68.                     "events": results[0].concat(results[1])
  69.                 });
  70.             });
  71.         }
  72.         else {
  73.             const sql = `SELECT * FROM Event`;
  74.            
  75.             db.connection.query(sql, (error, results, fields) => {
  76.                 if (error) {
  77.                     return res.sendStatus(500);
  78.                 }
  79.                 return res.send({
  80.                     "events": results
  81.                 });
  82.             });
  83.         }
  84.     });
  85.  
  86.     // Post method (create new event)
  87.     app.post('/api/v1/events', (req: Request, res: Response) => {
  88.         const title = req.body.title;
  89.         const max_capacity = req.body.max_capacity;
  90.         const content = req.body.content;
  91.         const ugid = req.body.ugid;
  92.         const lid = req.body.lid;
  93.         const evcat_id = req.body.evcat_id;
  94.  
  95.         if (!title || !ugid || !lid || !evcat_id) {
  96.             return res.sendStatus(400);
  97.         }
  98.  
  99.         const sql = `INSERT INTO Event (title, public, max_capacity, content,
  100.             usergroup_id, location_id, evcat_id) VALUES(?, ?, ?, ?, ?, ?, ?)`;
  101.         db.connection.query(sql, [title, 1, max_capacity, content, ugid, lid, evcat_id],
  102.             (error, results, fields) => {
  103.  
  104.                 if (error) {
  105.                     return res.sendStatus(500);
  106.                 }
  107.                 return res.sendStatus(201);
  108.         });
  109.     });
  110.  
  111.     /* /events/:evid */
  112.  
  113.     // Get method (can be single, recurring single or recurring (?) event)
  114.     // get specific event
  115.     app.get('/api/v1/events/:evid', (req: Request, res: Response) => {
  116.         const evid = req.params.evid;
  117.         if (!evid) {
  118.             return res.sendStatus(400);
  119.         }
  120.  
  121.         const sql = `
  122.             SELECT * FROM OneTimeEvent
  123.             WHERE event_id = ?;
  124.            
  125.             SELECT * FROM RecurringEvent
  126.             INNER JOIN RecurringSingleEvent ON
  127.             RecurringSingleEvent.recurringevent_id = RecurringEvent.recurringevent_id
  128.             WHERE RecurringEvent.event_id = ?`;
  129.  
  130.         db.connection.query(sql, [evid, evid], (error, results, fields) => {
  131.             if (error) {
  132.                 return res.sendStatus(500);
  133.             }
  134.  
  135.             return res.send({
  136.                 "OneTimeEvent": results[0],
  137.                 "RecurringEvent": results[1]
  138.             });
  139.         });
  140.     });
  141.  
  142.     // Put method (update existing event)
  143.     app.put('/api/v1/events/:evid', (req: Request, res: Response) => {
  144.         const evid = req.params.evid;
  145.         const title = req.body.title;
  146.         const max_capacity = req.body.max_capacity;
  147.         const content = req.body.content;
  148.         const ugid = req.body.ugid;
  149.         const lid = req.body.lid;
  150.         const evcat_id = req.body.evcat_id;
  151.         if (!evid || !title || !max_capacity || !content
  152.             || !ugid || !lid || !evcat_id) {
  153.             return res.sendStatus(400);
  154.         }
  155.        
  156.         const sql = `
  157.             UPDATE Event
  158.             SET title = ?, max_capacity = ?, content = ?,
  159.             usergroup_id = ?, usergroup_id = ?, evcat_id = ?
  160.             WHERE event_id = ?`;
  161.        
  162.         db.connection.query(sql, [title, max_capacity, content,
  163.             ugid, lid, evcat_id, evid], (error, results, fields) => {
  164.  
  165.             if (error) {
  166.                 return res.sendStatus(500);
  167.             }
  168.  
  169.             return res.sendStatus(200);
  170.         });
  171.     });
  172.  
  173.     // Delete Method (remove existing event)
  174.     app.delete('/api/v1/events/:evid', (req: Request, res: Response) => {
  175.         const evid = req.params.evid;
  176.         if (!evid) {
  177.             return res.sendStatus(400);
  178.         }
  179.  
  180.         const sql = `DELETE FROM Event
  181.             WHERE event_id = ?`;
  182.        
  183.         db.connection.query(sql, [evid], (error, results, fields) => {
  184.             if (error) {
  185.                 return res.sendStatus(500);
  186.             }
  187.             return res.sendStatus(200);
  188.         });
  189.     });
  190.  
  191.     /* /events/:evid/invited */
  192.    
  193.     // Get method (get users that are invited to the event)
  194.     app.get('/api/v1/events/:evid/invited', (req: Request, res: Response) => {
  195.         const evid = req.params.evid;
  196.         if (!evid) {
  197.             return res.sendStatus(400);
  198.         }
  199.  
  200.         const sql = `SELECT * FROM User  
  201.             INNER JOIN Invite ON
  202.             Invite.user_id = User.user_id
  203.             INNER JOIN EventInvite ON
  204.             EventInvite.invite_id = Invite.invite_id
  205.             WHERE EventInvite.event_id = ?`;
  206.  
  207.         db.connection.query(sql, [evid], (error, results, fields) => {
  208.             if (error) {
  209.                 return res.sendStatus(500);
  210.             }
  211.             return res.send({
  212.                 "invited": results
  213.             });
  214.         });
  215.     });
  216.  
  217.     // Post method (invite user to event)
  218.     app.post('/api/v1/events/:evid/invited', (req: Request, res: Response) => {
  219.         const evid = req.params.evid;
  220.         const uid = req.body.uid;
  221.         const message = req.body.message || "You have been invited to an event";
  222.         if (!evid || !uid) {
  223.             return res.sendStatus(400);
  224.         }
  225.  
  226.         // create new Invite
  227.         const sql = `
  228.             INSERT INTO Invite (user_id, message)
  229.             VALUES(?, ?);
  230.            
  231.             INSERT INTO EventInvite(invite_id, event_id)
  232.             SELECT Invite.invite_id, ? FROM Invite
  233.             WHERE Invite.user_id = ?; `;
  234.  
  235.         db.connection.query(sql, [uid, message, evid, uid], (error, results, fields) => {
  236.             if (error) {
  237.                 return res.sendStatus(500);
  238.             }
  239.             return res.sendStatus(201);
  240.         });
  241.     });
  242.  
  243.     /* /events/:evid/confirmed */
  244.  
  245.     // Get method (get users that are attending event)
  246.     app.get('/api/v1/events/:evid/confirmed', (req: Request, res: Response) => {
  247.         const evid = req.params.evid;
  248.         if (!evid) {
  249.             return res.sendStatus(400);
  250.         }
  251.  
  252.         const sql = `
  253.             (SELECT * FROM User
  254.             INNER JOIN SingularAttendance ON
  255.             SingularAttendance.user_id = User.user_id
  256.             WHERE SingularAttendance.event_id = ?)
  257.             UNION ALL
  258.             (SELECT * FROM User
  259.             INNER JOIN RecurringAttendance ON
  260.             RecurringAttendance.user_id = User.user_id
  261.             WHERE RecurringAttendance.event_id = ?)`;
  262.        
  263.         db.connection.query(sql, [evid, evid], (error, results, fields) => {
  264.             if (error) {
  265.                 return res.sendStatus(500);
  266.             }
  267.             return res.send({
  268.                 users: results
  269.             });
  270.         });
  271.     });
  272.  
  273.     /* /events/:evid/requested */
  274.  
  275.     // Get method (get users that requested to join event)
  276.     app.get('/api/v1/events/:evid/requested', (req: Request, res: Response) => {
  277.         const evid = req.params.evid;
  278.         if (!evid) {
  279.             return res.sendStatus(400);
  280.         }
  281.  
  282.         const sql = `SELECT * FROM User  
  283.             INNER JOIN Request ON
  284.             Request.user_id = User.user_id
  285.             INNER JOIN EventRequest ON
  286.             EventRequest.request_id = Request.request_id
  287.             WHERE EventRequest.event_id = ?`;
  288.  
  289.         db.connection.query(sql, [evid], (error, results, fields) => {
  290.             if (error) {
  291.                 return res.sendStatus(500);
  292.             }
  293.             return res.send({
  294.                 "requested": results
  295.             });
  296.         });
  297.     });
  298.  
  299.     // Post method (request to join event)
  300.     app.post('/api/v1/events/:evid/requested', (req: Request, res: Response) => {
  301.         const evid = req.params.evid;
  302.         const uid = req.body.uid;
  303.         const message = req.body.message || "You have requested to join the event";
  304.         if (!evid || !uid) {
  305.             return res.sendStatus(400);
  306.         }
  307.  
  308.         // create new Request
  309.         const sql = `
  310.             INSERT INTO Request (user_id, message)
  311.             VALUES(?, ?);
  312.            
  313.             INSERT INTO EventRequest(request_id, event_id)
  314.             SELECT Request.request_id, ? FROM Request
  315.             WHERE Request.user_id = ?; `;
  316.  
  317.         db.connection.query(sql, [uid, message, evid, uid], (error, results, fields) => {
  318.             if (error) {
  319.                 return res.sendStatus(500);
  320.             }
  321.             return res.sendStatus(201);
  322.         });
  323.     });
  324.  
  325.     /* /events/:evid/organizing */
  326.  
  327.     // Get method (get event organizers)
  328.     app.get('/api/v1/events/:evid/organizing', (req: Request, res: Response) => {
  329.         const evid = req.params.evid;
  330.         if (!evid) {
  331.             return res.sendStatus(400);
  332.         }
  333.  
  334.         const sql = `
  335.             SELECT * FROM User
  336.             INNER JOIN Organizer ON
  337.             Organizer.user_id = User.user_id
  338.             WHERE Organizer.event_id = ?`;
  339.        
  340.         db.connection.query(sql, [evid], (error, results, fields) => {
  341.             if (error) {
  342.                 return res.sendStatus(500);
  343.             }
  344.             return res.send({
  345.                 "organizers": results
  346.             });
  347.         });
  348.     });
  349.  
  350.     // Post method (add event organizer)
  351.     app.post('/api/v1/events/:evid/organizing', (req: Request, res: Response) => {
  352.         const evid = req.params.evid;
  353.         const uid = req.body.uid;
  354.         if (!evid || !uid) {
  355.             return res.sendStatus(400);
  356.         }
  357.  
  358.         const sql = `INSERT INTO Organizer (user_id, event_id)
  359.                 VALUES(?, ?)`;
  360.         db.connection.query(sql, [uid, evid], (error, results, fields) => {
  361.             if (error) {
  362.                 return res.sendStatus(500);
  363.             }
  364.             return res.sendStatus(201);
  365.         });
  366.     });
  367. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement