Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- listForWeb(req, res) {
- if (req.user === undefined) {
- return res.status(400).send("You don't have permissions to make this request");
- }
- let result = {};
- return sequelize.query('SELECT COUNT(*) FROM events INNER JOIN permissions ON permissions.entity_id = events.entity_id' +
- ' INNER JOIN entities ON "entities".id = "permissions".entity_id WHERE "permissions".user_id = $1 AND events.start_date > current_timestamp',
- { bind: [req.user.id], type: sequelize.QueryTypes.SELECT })
- .then((num) => {
- result.count = parseInt(num[0].count);
- 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' +
- ' 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',
- { bind: [req.user.id, req.query.page, req.query.limit], type: sequelize.QueryTypes.SELECT })
- .then((events) => {
- result.events = events;
- return res.status(200).send(result);
- })
- .catch((error) => res.status(400).send(error));
- })
- .catch((error) => res.status(400).send(error));
- },
- getEvents(req, res) {
- let query_options = {};
- query_options.where = {};
- query_options.include = [];
- // Check if user token matches
- let user_id = req.query.user_id;
- let token = req.query.token;
- if (!User.tokenMatches(token, user_id)) {
- res.status(401).send();
- return;
- }
- // Shouldn't include past events
- if (!req.query.past) {
- let today = Math.floor(Date.now());
- query_options.where = {
- [Op.or]: [
- { start_date: { [Op.gte]: today } },
- {
- start_date: { [Op.lt]: today },
- end_date: { [Op.gte]: today }
- }
- ]
- }
- }
- // Set pagination settings
- if (req.query.limit) query_options.limit = req.query.limit;
- if (req.query.offset) query_options.offset = req.query.offset;
- query_options.order = [['start_date', 'ASC']];
- // Filter entities
- if (req.query.entities) {
- query_options.where.entity_id = Array.isArray(req.query.entities) ? { [Op.or]: req.query.entities } : req.query.entities;
- query_options.include.push(sequelize.models.entities);
- } else {
- query_options.include.push(sequelize.models.entities);
- }
- // Filter categories
- if (req.query.categories) {
- query_options.include.push({
- model: sequelize.models.categories,
- required: true,
- where: {
- id: Array.isArray(req.query.categories) ? { [Op.or]: req.query.categories } : req.query.categories
- }
- });
- } else {
- query_options.include.push({
- model: sequelize.models.categories
- });
- }
- // Get favorite boolean
- query_options.include.push({
- model: sequelize.models.users,
- as: 'favorite',
- where: {
- id: user_id
- },
- attributes: {
- exclude: ["id", "username", "name", "password", "email", "token", "type"],
- include: [[sequelize.literal('CASE "favorite".id WHEN ' + user_id + ' THEN true ELSE false END'), 'is_favorite']]
- },
- required: false
- });
- query_options.attributes = [
- 'id', 'title', 'description', 'entity_id',
- 'start_date', 'end_date', 'location', 'user_id'
- ];
- return Event.findAll(query_options)
- .then((events) => res.status(200).send(events))
- .catch((error) => res.status(400).send(error));
- },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement