// @flow import Sequelize from 'sequelize'; import Router from 'koa-router'; import auth from '../middlewares/authentication'; import pagination from './middlewares/pagination'; import { presentEvent } from '../presenters'; import { Event, Team, User } from '../models'; import policy from '../policies'; const Op = Sequelize.Op; const { authorize } = policy; const router = new Router(); router.post('events.list', auth(), pagination(), async ctx => { let { sort = 'createdAt', direction, auditLog = false } = ctx.body; if (direction !== 'ASC') direction = 'DESC'; const user = ctx.state.user; const paranoid = false; const collectionIds = await user.collectionIds(paranoid); let where = { name: Event.ACTIVITY_EVENTS, teamId: user.teamId, [Op.or]: [ { collectionId: collectionIds }, { collectionId: { [Op.eq]: null, }, }, ], }; if (auditLog) { authorize(user, 'auditLog', Team); where.name = Event.AUDIT_EVENTS; } const events = await Event.findAll({ where, order: [[sort, direction]], include: [ { model: User, as: 'actor', }, ], offset: ctx.state.pagination.offset, limit: ctx.state.pagination.limit, }); ctx.body = { pagination: ctx.state.pagination, data: events.map(event => presentEvent(event, auditLog)), }; }); export default router;