diff --git a/src/app.ts b/src/app.ts index 071ad5f933..07be3a4975 100644 --- a/src/app.ts +++ b/src/app.ts @@ -12,6 +12,7 @@ import foldersRouter from './routes/folders'; import relationsRouter from './routes/relations'; import revisionsRouter from './routes/revisions'; import rolesRouter from './routes/roles'; +import usersRouter from './routes/users'; import notFoundHandler from './routes/not-found'; const app = express() @@ -25,6 +26,7 @@ const app = express() .use('/relations', relationsRouter) .use('/revisions', revisionsRouter) .use('/roles', rolesRouter) + .use('/users', usersRouter) .use(notFoundHandler) .use(errorHandler); diff --git a/src/routes/users.ts b/src/routes/users.ts new file mode 100644 index 0000000000..bb9de1fadc --- /dev/null +++ b/src/routes/users.ts @@ -0,0 +1,53 @@ +import express from 'express'; +import asyncHandler from 'express-async-handler'; +import sanitizeQuery from '../middleware/sanitize-query'; +import validateQuery from '../middleware/validate-query'; +import * as UsersService from '../services/users'; + +const router = express.Router(); + +router.post( + '/', + asyncHandler(async (req, res) => { + const records = await UsersService.createUser(req.body, res.locals.query); + return res.json({ data: records }); + }) +); + +router.get( + '/', + sanitizeQuery, + validateQuery, + asyncHandler(async (req, res) => { + const records = await UsersService.readUsers(res.locals.query); + return res.json({ data: records }); + }) +); + +router.get( + '/:pk', + sanitizeQuery, + validateQuery, + asyncHandler(async (req, res) => { + const record = await UsersService.readUser(req.params.pk, res.locals.query); + return res.json({ data: record }); + }) +); + +router.patch( + '/:pk', + asyncHandler(async (req, res) => { + const records = await UsersService.updateUser(req.params.pk, req.body, res.locals.query); + return res.json({ data: records }); + }) +); + +router.delete( + '/:pk', + asyncHandler(async (req, res) => { + await UsersService.deleteUser(req.params.pk); + return res.status(200).end(); + }) +); + +export default router; diff --git a/src/services/users.ts b/src/services/users.ts new file mode 100644 index 0000000000..ad2a4df4ba --- /dev/null +++ b/src/services/users.ts @@ -0,0 +1,22 @@ +import { Query } from '../types/query'; +import * as ItemsService from './items'; + +export const createUser = async (data: Record, query: Query) => { + return await ItemsService.createItem('directus_users', data, query); +}; + +export const readUsers = async (query: Query) => { + return await ItemsService.readItems('directus_users', query); +}; + +export const readUser = async (pk: string | number, query: Query) => { + return await ItemsService.readItem('directus_users', pk, query); +}; + +export const updateUser = async (pk: string | number, data: Record, query: Query) => { + return await ItemsService.updateItem('directus_users', pk, data, query); +}; + +export const deleteUser = async (pk: string | number) => { + await ItemsService.deleteItem('directus_users', pk); +};