strapi-plugin-populate
Version:
A strapi plugin that allow to populate models by query-params and routes.json
66 lines • 2.09 kB
JavaScript
;
module.exports = ({ model, strapi }) => {
if (model.kind === 'singleType') {
return createSingleTypeService({ model, strapi });
}
return createCollectionTypeService({ model, strapi });
};
const createSingleTypeService = ({ model, strapi }) => {
const { modelName } = model;
return {
find(populate) {
return strapi.entityService.find({ populate }, { model: modelName });
},
async createOrUpdate(data, { files } = {}) {
const entity = await this.find();
if (!entity) {
return strapi.entityService.create({ data, files }, { model: modelName });
} else {
return strapi.entityService.update(
{
params: {
id: entity.id,
},
data,
files,
},
{ model: modelName }
);
}
},
async delete() {
const entity = await this.find();
if (!entity) return;
return strapi.entityService.delete({ params: { id: entity.id } }, { model: modelName });
},
};
};
const createCollectionTypeService = ({ model, strapi }) => {
const { modelName } = model;
return {
find(params, populate) {
return strapi.entityService.find({ params, populate }, { model: modelName });
},
findOne(params, populate) {
return strapi.entityService.findOne({ params, populate }, { model: modelName });
},
count(params) {
return strapi.entityService.count({ params }, { model: modelName });
},
create(data, { files } = {}) {
return strapi.entityService.create({ data, files }, { model: modelName });
},
update(params, data, { files } = {}) {
return strapi.entityService.update({ params, data, files }, { model: modelName });
},
delete(params) {
return strapi.entityService.delete({ params }, { model: modelName });
},
search(params) {
return strapi.entityService.search({ params }, { model: modelName });
},
countSearch(params) {
return strapi.entityService.countSearch({ params }, { model: modelName });
},
};
};