2019-11-13 18:49:08 +01:00

86 lines
2.2 KiB
JavaScript

'use strict';
const _ = require('lodash');
const uploadFiles = require('../utils/upload-files');
/**
* A set of functions called "actions" for `ContentManager`
*/
module.exports = {
fetch(params, source, populate) {
return strapi
.query(params.model, source)
.findOne({ id: params.id }, populate);
},
fetchAll(params, query) {
const { query: request, source, populate, ...filters } = query;
const queryFilter = !_.isEmpty(request)
? {
...filters, // Filters is an object containing the limit/sort and start
...request,
}
: filters;
// Find entries using `queries` system
return strapi.query(params.model, source).find(queryFilter, populate);
},
count(params, query) {
const { source, ...filters } = query;
return strapi.query(params.model, source).count(filters);
},
async create(data, { files, model, source } = {}) {
const entry = await strapi.query(model, source).create(data);
if (files) {
await uploadFiles(entry, files, { model, source });
return strapi.query(model, source).findOne({ id: entry.id });
}
return entry;
},
async edit(params, data, { model, source, files } = {}) {
const entry = await strapi
.query(model, source)
.update({ id: params.id }, data);
if (files) {
await uploadFiles(entry, files, { model, source });
return strapi.query(model, source).findOne({ id: entry.id });
}
return entry;
},
delete(params, { source }) {
return strapi.query(params.model, source).delete({ id: params.id });
},
deleteMany(params, query) {
const { source } = query;
const { model } = params;
const toRemove = Object.values(_.omit(query, 'source'));
const { primaryKey } = strapi.query(model, source);
const filter = { [`${primaryKey}_in`]: toRemove, _limit: 100 };
return strapi.query(model, source).delete(filter);
},
search(params, query) {
const { model } = params;
const { source } = query;
return strapi.query(model, source).search(query);
},
countSearch(params, query) {
const { model } = params;
const { source, _q } = query;
return strapi.query(model, source).countSearch({ _q });
},
};