From ea3b7aa68b55c6698d9bedd90e9f73552468c353 Mon Sep 17 00:00:00 2001 From: Mathis Date: Tue, 30 Apr 2024 16:35:51 +0200 Subject: [PATCH] feat(services): prevent id field from being factorized in mysql service In the `mysql.service.ts`, the `factorize` function has been updated to exclude the `id` field. This change ensures the 'id' field is not injected into the result to avoid any potential issues. Furthermore, The update operation in the same file has been refactored to use the updated `factorize` function, hence enhancing code reusability. Issue: #18 Signed-off-by: Mathis --- src/services/mysql.service.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/services/mysql.service.ts b/src/services/mysql.service.ts index 8c6c7d3..ae8596d 100644 --- a/src/services/mysql.service.ts +++ b/src/services/mysql.service.ts @@ -56,6 +56,7 @@ class MysqlHandler { /** * Factorize the input data values into a database query. + * `id` field will not be injected in result to avoid problems. * * @param {IDbFactorizeInput} data - The input data containing values to factorize. * @return {Promise} - A promise resolving to the factorized output. @@ -63,7 +64,14 @@ class MysqlHandler { factorize(data: IDbFactorizeInput): Promise { return new Promise((resolve, reject)=>{ try { - const _sqlQueryKeys = Object.keys(data.values).map((key: string) => `\'${key}\' = ?`) + // @ts-ignore + data.values.id ? delete data.values.id : null; + const _sqlQueryKeys = Object.keys(data.values).map((key: string) => { + if (key !== 'id') { + return `\'${key}\' = ?` + } + return ''; + }) const values = Object.values(data.values).map((val)=>val) this.Logger.debug(`\n\n>-> Factorized ${_sqlQueryKeys.length} keys for a prepare Query.\n>-> Action: ${data.actionName}\n`) const sqlQueryKeys = _sqlQueryKeys.join(', ') @@ -358,17 +366,10 @@ const MySqlService = { if (data.id.length !== 36) return reject("Id invalid"); try { - const _template = ` - ${data.slug_name ? "`slug_name` = ?," : null} - ${data.display_name ? "`display_name` = ?," : null} - ${data.image_blob ? "`slug_name` = ?," : null}`; - - const _values = [ - data.slug_name, - data.display_name, - data.image_blob, - data.id, - ]; + handler.factorize({ + values: data, + actionName: `Update user ID::${data.id}` + }) const _sql = `UPDATE "brands" SET ${_template} WHERE 'id' = ?`; handler.execute(_sql, _values).then((result) => { return resolve(result as unknown as IDbStatusResult);