stackpress
Version:
Incept is a content management framework.
31 lines (30 loc) • 1.24 kB
JavaScript
import detail from '../actions/detail.js';
export default function detailEventFactory(model) {
return async function DetailEventAction(req, res, ctx) {
if (res.body || (res.code && res.code !== 200)) {
return;
}
const engine = ctx.plugin('database');
if (!engine)
return;
const ids = Object.fromEntries(model.ids
.map(column => [column.name, req.data(column.name)])
.filter(entry => Boolean(entry[1])));
if (!req.data.has('columns')
&& Array.isArray(model.query)
&& model.query.length
&& model.query.every(column => typeof column === 'string')) {
req.data.set('columns', model.query);
}
const columns = req.data('columns');
const selectors = Array.isArray(columns) && columns.every(column => typeof column === 'string') ? columns : ['*'];
const seed = ctx.config.path('database.seed');
const response = await detail(model, engine, ids, selectors, seed);
if (response.code === 200 && !response.results) {
response.code = 404;
response.status = 'Not Found';
}
res.fromStatusResponse(response);
};
}
;