Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. listForWeb(req, res) {
  2.  
  3. if (req.user === undefined) {
  4. return res.status(400).send("You don't have permissions to make this request");
  5. }
  6.  
  7. let result = {};
  8. return sequelize.query('SELECT COUNT(*) FROM events INNER JOIN permissions ON permissions.entity_id = events.entity_id' +
  9. ' INNER JOIN entities ON "entities".id = "permissions".entity_id WHERE "permissions".user_id = $1 AND events.start_date > current_timestamp',
  10. { bind: [req.user.id], type: sequelize.QueryTypes.SELECT })
  11. .then((num) => {
  12. result.count = parseInt(num[0].count);
  13.  
  14. return sequelize.query('SELECT events.id, events.title, events.start_date, entities.id AS entity_id, entities.initials from events INNER JOIN permissions ON permissions.entity_id = events.entity_id' +
  15. ' INNER JOIN entities ON "entities".id = "permissions".entity_id WHERE "permissions".user_id = $1 AND events.start_date > current_timestamp OR (events.start_date < current_timestamp AND events.end_date > current_timestamp) ORDER BY start_date OFFSET $2 LIMIT $3',
  16. { bind: [req.user.id, req.query.page, req.query.limit], type: sequelize.QueryTypes.SELECT })
  17.  
  18. .then((events) => {
  19. result.events = events;
  20. return res.status(200).send(result);
  21. })
  22. .catch((error) => res.status(400).send(error));
  23. })
  24. .catch((error) => res.status(400).send(error));
  25.  
  26. },
  27.  
  28.  
  29. getEvents(req, res) {
  30. let query_options = {};
  31. query_options.where = {};
  32. query_options.include = [];
  33.  
  34. // Check if user token matches
  35. let user_id = req.query.user_id;
  36. let token = req.query.token;
  37. if (!User.tokenMatches(token, user_id)) {
  38. res.status(401).send();
  39. return;
  40. }
  41.  
  42. // Shouldn't include past events
  43. if (!req.query.past) {
  44. let today = Math.floor(Date.now());
  45. query_options.where = {
  46. [Op.or]: [
  47. { start_date: { [Op.gte]: today } },
  48. {
  49. start_date: { [Op.lt]: today },
  50. end_date: { [Op.gte]: today }
  51. }
  52. ]
  53. }
  54. }
  55.  
  56. // Set pagination settings
  57. if (req.query.limit) query_options.limit = req.query.limit;
  58. if (req.query.offset) query_options.offset = req.query.offset;
  59. query_options.order = [['start_date', 'ASC']];
  60.  
  61. // Filter entities
  62. if (req.query.entities) {
  63. query_options.where.entity_id = Array.isArray(req.query.entities) ? { [Op.or]: req.query.entities } : req.query.entities;
  64. query_options.include.push(sequelize.models.entities);
  65. } else {
  66. query_options.include.push(sequelize.models.entities);
  67. }
  68.  
  69. // Filter categories
  70. if (req.query.categories) {
  71. query_options.include.push({
  72. model: sequelize.models.categories,
  73. required: true,
  74. where: {
  75. id: Array.isArray(req.query.categories) ? { [Op.or]: req.query.categories } : req.query.categories
  76. }
  77. });
  78. } else {
  79. query_options.include.push({
  80. model: sequelize.models.categories
  81. });
  82. }
  83.  
  84. // Get favorite boolean
  85. query_options.include.push({
  86. model: sequelize.models.users,
  87. as: 'favorite',
  88. where: {
  89. id: user_id
  90. },
  91. attributes: {
  92. exclude: ["id", "username", "name", "password", "email", "token", "type"],
  93. include: [[sequelize.literal('CASE "favorite".id WHEN ' + user_id + ' THEN true ELSE false END'), 'is_favorite']]
  94. },
  95. required: false
  96. });
  97.  
  98. query_options.attributes = [
  99. 'id', 'title', 'description', 'entity_id',
  100. 'start_date', 'end_date', 'location', 'user_id'
  101. ];
  102.  
  103. return Event.findAll(query_options)
  104. .then((events) => res.status(200).send(events))
  105. .catch((error) => res.status(400).send(error));
  106. },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement