Add activity (read) endpoints

This commit is contained in:
rijkvanzanten
2020-06-18 13:48:09 -04:00
parent b47da62668
commit 62701b1cbd
4 changed files with 49 additions and 3 deletions

View File

@@ -5,12 +5,14 @@ import express from 'express';
import bodyParser from 'body-parser';
import { errorHandler } from './error';
import itemsRouter from './routes/items';
import activityRouter from './routes/activity';
import notFoundHandler from './routes/not-found';
const app = express()
.disable('x-powered-by')
.use(bodyParser.json())
.use('/items', itemsRouter)
.use('/activity', activityRouter)
.use(notFoundHandler)
.use(errorHandler);

View File

@@ -12,7 +12,7 @@ import asyncHandler from 'express-async-handler';
import APIError, { ErrorCode } from '../error';
const validateQuery: RequestHandler = asyncHandler(async (req, res, next) => {
if (!res.locals.collection) return next();
if (!req.params.collection) return next();
if (!res.locals.query) return next();
const query: Query = res.locals.query;
@@ -27,14 +27,14 @@ const validateQuery: RequestHandler = asyncHandler(async (req, res, next) => {
query.sort.forEach((sort) => fieldsToCheck.add(sort.column));
}
const fieldsExist = await hasFields(res.locals.collection, Array.from(fieldsToCheck));
const fieldsExist = await hasFields(req.params.collection, Array.from(fieldsToCheck));
Array.from(fieldsToCheck).forEach((field, index) => {
const exists = fieldsExist[index];
if (exists === false)
throw new APIError(
ErrorCode.FIELD_NOT_FOUND,
`Field ${field} doesn't exist in ${res.locals.collection}.`
`Field ${field} doesn't exist in ${req.params.collection}.`
);
});

34
src/routes/activity.ts Normal file
View File

@@ -0,0 +1,34 @@
import express from 'express';
import asyncHandler from 'express-async-handler';
import sanitizeQuery from '../middleware/sanitize-query';
import validateQuery from '../middleware/validate-query';
import { readActivities, readActivity } from '../services/activity';
const router = express.Router();
router.get(
'/',
sanitizeQuery,
validateQuery,
asyncHandler(async (req, res) => {
const records = await readActivities(res.locals.query);
return res.json({
data: records,
});
})
);
router.get(
'/:pk',
sanitizeQuery,
validateQuery,
asyncHandler(async (req, res) => {
const record = await readActivity(req.params.pk, res.locals.query);
return res.json({
data: record,
});
})
);
export default router;

10
src/services/activity.ts Normal file
View File

@@ -0,0 +1,10 @@
import { Query } from '../types/query';
import * as ItemsService from './items';
export const readActivities = async (query: Query) => {
return await ItemsService.readItems('directus_activity', query);
};
export const readActivity = async (pk: string | number, query: Query) => {
return await ItemsService.readItem('directus_activity', pk, query);
};