From 766da06c2fe150638a9d58b12888edb0ac9eb65c Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 30 Jul 2024 09:40:34 +0200 Subject: [PATCH] feat: refs #7524 add mock limit on find query --- back/model-config.json | 3 +++ back/models/ormConfig.json | 26 +++++++++++++++++++ .../11175-pinkChico/00-firstScript.sql | 8 ++++++ loopback/common/models/vn-model.js | 24 ++++++++++++++++- loopback/locale/es.json | 3 ++- 5 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 back/models/ormConfig.json create mode 100644 db/versions/11175-pinkChico/00-firstScript.sql diff --git a/back/model-config.json b/back/model-config.json index a16fe4e8a3..9884eadfbc 100644 --- a/back/model-config.json +++ b/back/model-config.json @@ -115,6 +115,9 @@ "NotificationSubscription": { "dataSource": "vn" }, + "OrmConfig": { + "dataSource": "vn" + }, "Province": { "dataSource": "vn" }, diff --git a/back/models/ormConfig.json b/back/models/ormConfig.json new file mode 100644 index 0000000000..ef4c2b181f --- /dev/null +++ b/back/models/ormConfig.json @@ -0,0 +1,26 @@ +{ + "name": "OrmConfig", + "base": "VnModel", + "options": { + "mysql": { + "table": "ormConfig" + } + }, + "properties": { + "id": { + "type": "number", + "id": true + }, + "selectLimit": { + "type": "number" + } + }, + "acls": [ + { + "accessType": "*", + "principalType": "ROLE", + "principalId": "$authenticated", + "permission": "ALLOW" + } + ] +} \ No newline at end of file diff --git a/db/versions/11175-pinkChico/00-firstScript.sql b/db/versions/11175-pinkChico/00-firstScript.sql new file mode 100644 index 0000000000..349f4c7f73 --- /dev/null +++ b/db/versions/11175-pinkChico/00-firstScript.sql @@ -0,0 +1,8 @@ +USE vn; + +CREATE TABLE IF NOT EXISTS ormConfig ( + id int(5) NOT NULL AUTO_INCREMENT primary key, + selectLimit int(5) NOT NULL +); + +INSERT IGNORE INTO ormConfig SET selectLimit = 1000; \ No newline at end of file diff --git a/loopback/common/models/vn-model.js b/loopback/common/models/vn-model.js index 22b535f629..30a2da6be8 100644 --- a/loopback/common/models/vn-model.js +++ b/loopback/common/models/vn-model.js @@ -5,6 +5,7 @@ const utils = require('loopback/lib/utils'); module.exports = function(Self) { Self.ParameterizedSQL = ParameterizedSQL; + let isSelect; require('../methods/vn-model/getSetValues')(Self); require('../methods/vn-model/getEnumValues')(Self); @@ -13,7 +14,6 @@ module.exports = function(Self) { Object.assign(Self, { setup() { Self.super_.setup.call(this); - /** * Setting a global transaction timeout to find out if the service * is blocked because the connection pool is empty. @@ -28,6 +28,28 @@ module.exports = function(Self) { }; }); + /* + * Intercept GET request for find + */ + this.beforeRemote('find', async function(ctx) { + isSelect = true; + const filter = ctx.args.filter || {}; + // const models = this.app.models; + if (filter.limit === undefined) { + // WIP + // const {limit} = await models.OrmConfig.findOne(); Not working + // const [{selectLimit: limit}] = await this.rawSql('SELECT selectLimit FROM ormConfig', null); + filter.limit = 1/* limit */; + ctx.args.filter = filter; + } + }); + + this.observe('loaded', async function({data}) { + if (!isSelect) return; + const length = Array.isArray(data) ? data.length : data ? 1 : 0; + if (length >= 1) throw new UserError('Too many records'); + }); + // Register field ACL validation /* this.beforeRemote('prototype.patchAttributes', ctx => this.checkUpdateAcls(ctx)); diff --git a/loopback/locale/es.json b/loopback/locale/es.json index acc3d69f65..c2973bf624 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -368,5 +368,6 @@ "Payment method is required": "El método de pago es obligatorio", "Cannot send mail": "Não é possível enviar o email", "CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos", - "The sale not exists in the item shelving": "La venta no existe en la estantería del artículo" + "The sale not exists in the item shelving": "La venta no existe en la estantería del artículo", + "Too many records": "Demasiados registros" } \ No newline at end of file