Pierre Noël c0d9dd26d1 Fix findOne with PK as one of the params
Signed-off-by: Pierre Noël <pierre.noel@strapi.io>
2020-03-06 09:08:20 +01:00

86 lines
2.2 KiB
JavaScript

'use strict';
const { replaceIdByPrimaryKey } = require('../utils/primary-key');
module.exports = function createQuery(opts) {
return new Query(opts);
};
class Query {
constructor({ model, connectorQuery }) {
this.connectorQuery = connectorQuery;
this.model = model;
}
get orm() {
return this.model.orm;
}
get primaryKey() {
return this.model.primaryKey;
}
get associations() {
return this.model.associations;
}
/**
* Run custom database logic
*/
custom(mapping) {
if (typeof mapping === 'function') {
return mapping.bind(this, { model: this.model });
}
if (!mapping[this.orm]) {
throw new Error(`Missing mapping for orm ${this.orm}`);
}
if (typeof mapping[this.orm] !== 'function') {
throw new Error(`Custom queries must be functions received ${typeof mapping[this.orm]}`);
}
return mapping[this.model.orm].call(this, { model: this.model });
}
find(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.find(newParams, ...args);
}
findOne(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.findOne(newParams, ...args);
}
create(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.create(newParams, ...args);
}
update(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.update(newParams, ...args);
}
delete(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.delete(newParams, ...args);
}
count(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.count(newParams, ...args);
}
search(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.search(newParams, ...args);
}
countSearch(params = {}, ...args) {
const newParams = replaceIdByPrimaryKey(params, this.model);
return this.connectorQuery.countSearch(newParams, ...args);
}
}