From e6c1c9bacc50ef85cd36e86f4a54c7709344ff5f Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Fri, 10 Jul 2020 13:39:44 -0400 Subject: [PATCH 1/2] Fix contains filter --- src/database/run-ast.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/database/run-ast.ts b/src/database/run-ast.ts index eb22174dfc..e45359f901 100644 --- a/src/database/run-ast.ts +++ b/src/database/run-ast.ts @@ -28,7 +28,10 @@ export default async function runAST(ast: AST, query = ast.query) { if (query.filter) { query.filter.forEach((filter) => { if (filter.operator === 'in') { - dbQuery.whereIn(filter.column, filter.value as (string | number)[]); + let value = filter.value; + if (typeof value === 'string') value = value.split(','); + + dbQuery.whereIn(filter.column, value as string[]); } if (filter.operator === 'eq') { From 9031d90e3886e0536dd908c1dc13bdbfd71e5ea7 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Fri, 10 Jul 2020 15:13:00 -0400 Subject: [PATCH 2/2] Add comment endpoints --- src/routes/activity.ts | 56 ++++++++++++++++++++++++++++++++++++++++ src/services/activity.ts | 13 ++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/routes/activity.ts b/src/routes/activity.ts index 0e72d959de..43b846ffcd 100644 --- a/src/routes/activity.ts +++ b/src/routes/activity.ts @@ -34,4 +34,60 @@ router.get( }) ); +router.post( + '/comment', + useCollection('directus_activity'), + sanitizeQuery, + validateQuery, + asyncHandler(async (req, res) => { + const primaryKey = await ActivityService.createActivity({ + ...req.body, + action: ActivityService.Action.COMMENT, + action_by: req.user, + ip: req.ip, + user_agent: req.get('user-agent'), + }); + + const record = await ActivityService.readActivity(primaryKey, req.sanitizedQuery); + + return res.json({ + data: record || null, + }); + }) +); + +router.patch( + '/comment/:pk', + useCollection('directus_activity'), + sanitizeQuery, + validateQuery, + asyncHandler(async (req, res) => { + const primaryKey = await ActivityService.updateActivity(req.params.pk, req.body, { + user: req.user, + ip: req.ip, + userAgent: req.get('user-agent'), + }); + + const record = await ActivityService.readActivity(primaryKey, req.sanitizedQuery); + + return res.json({ + data: record || null, + }); + }) +); + +router.delete( + '/comment/:pk', + useCollection('directus_activity'), + asyncHandler(async (req, res) => { + await ActivityService.deleteActivity(req.params.pk, { + user: req.user, + ip: req.ip, + userAgent: req.get('user-agent'), + }); + + return res.status(200).end(); + }) +); + export default router; diff --git a/src/services/activity.ts b/src/services/activity.ts index ca80fa23d8..d6f854afdc 100644 --- a/src/services/activity.ts +++ b/src/services/activity.ts @@ -1,5 +1,6 @@ import { Query } from '../types/query'; import * as ItemsService from './items'; +import { Accountability } from '../types'; export enum Action { CREATE = 'create', @@ -22,3 +23,15 @@ export const readActivities = async (query?: Query) => { export const readActivity = async (pk: string | number, query?: Query) => { return await ItemsService.readItem('directus_activity', pk, query); }; + +export const updateActivity = async ( + pk: string | number, + data: Record, + accountability: Accountability +) => { + return await ItemsService.updateItem('directus_activity', pk, data, accountability); +}; + +export const deleteActivity = async (pk: string | number, accountability?: Accountability) => { + return await ItemsService.deleteItem('directus_activity', pk, accountability); +};