diff --git a/src/app.ts b/src/app.ts index b0b30d4163..124c6f2b8d 100644 --- a/src/app.ts +++ b/src/app.ts @@ -18,6 +18,7 @@ import revisionsRouter from './routes/revisions'; import rolesRouter from './routes/roles'; import usersRouter from './routes/users'; import settingsRouter from './routes/settings'; +import webhooksRouter from './routes/webhooks'; import notFoundHandler from './routes/not-found'; @@ -36,6 +37,7 @@ const app = express() .use('/roles', rolesRouter) .use('/users', usersRouter) .use('/settings', settingsRouter) + .use('/webhooks', webhooksRouter) .use(notFoundHandler) .use(errorHandler); diff --git a/src/routes/webhooks.ts b/src/routes/webhooks.ts new file mode 100644 index 0000000000..f03157ab7f --- /dev/null +++ b/src/routes/webhooks.ts @@ -0,0 +1,57 @@ +import express from 'express'; +import asyncHandler from 'express-async-handler'; +import sanitizeQuery from '../middleware/sanitize-query'; +import validateQuery from '../middleware/validate-query'; +import * as WebhooksService from '../services/webhooks'; + +const router = express.Router(); + +router.post( + '/', + asyncHandler(async (req, res) => { + const records = await WebhooksService.createWebhook(req.body, res.locals.query); + return res.json({ data: records }); + }) +); + +router.get( + '/', + sanitizeQuery, + validateQuery, + asyncHandler(async (req, res) => { + const records = await WebhooksService.readWebhooks(res.locals.query); + return res.json({ data: records }); + }) +); + +router.get( + '/:pk', + sanitizeQuery, + validateQuery, + asyncHandler(async (req, res) => { + const record = await WebhooksService.readWebhook(req.params.pk, res.locals.query); + return res.json({ data: record }); + }) +); + +router.patch( + '/:pk', + asyncHandler(async (req, res) => { + const records = await WebhooksService.updateWebhook( + req.params.pk, + req.body, + res.locals.query + ); + return res.json({ data: records }); + }) +); + +router.delete( + '/:pk', + asyncHandler(async (req, res) => { + await WebhooksService.deleteWebhook(req.params.pk); + return res.status(200).end(); + }) +); + +export default router; diff --git a/src/services/webhooks.ts b/src/services/webhooks.ts new file mode 100644 index 0000000000..6c648ca0e5 --- /dev/null +++ b/src/services/webhooks.ts @@ -0,0 +1,26 @@ +import { Query } from '../types/query'; +import * as ItemsService from './items'; + +export const createWebhook = async (data: Record, query: Query) => { + return await ItemsService.createItem('directus_webhooks', data, query); +}; + +export const readWebhooks = async (query: Query) => { + return await ItemsService.readItems('directus_webhooks', query); +}; + +export const readWebhook = async (pk: string | number, query: Query) => { + return await ItemsService.readItem('directus_webhooks', pk, query); +}; + +export const updateWebhook = async ( + pk: string | number, + data: Record, + query: Query +) => { + return await ItemsService.updateItem('directus_webhooks', pk, data, query); +}; + +export const deleteWebhook = async (pk: string | number) => { + await ItemsService.deleteItem('directus_webhooks', pk); +};