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 <yidhra@tuta.io>
This commit is contained in:
Mathis H (Avnyr) 2024-04-30 16:35:51 +02:00
parent bc12f94e41
commit ea3b7aa68b
Signed by: Mathis
GPG Key ID: DD9E0666A747D126

View File

@ -56,6 +56,7 @@ class MysqlHandler {
/** /**
* Factorize the input data values into a database query. * 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. * @param {IDbFactorizeInput} data - The input data containing values to factorize.
* @return {Promise<IDbFactorizeOutput>} - A promise resolving to the factorized output. * @return {Promise<IDbFactorizeOutput>} - A promise resolving to the factorized output.
@ -63,7 +64,14 @@ class MysqlHandler {
factorize(data: IDbFactorizeInput): Promise<IDbFactorizeOutput> { factorize(data: IDbFactorizeInput): Promise<IDbFactorizeOutput> {
return new Promise((resolve, reject)=>{ return new Promise((resolve, reject)=>{
try { 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) 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`) this.Logger.debug(`\n\n>-> Factorized ${_sqlQueryKeys.length} keys for a prepare Query.\n>-> Action: ${data.actionName}\n`)
const sqlQueryKeys = _sqlQueryKeys.join(', ') const sqlQueryKeys = _sqlQueryKeys.join(', ')
@ -358,17 +366,10 @@ const MySqlService = {
if (data.id.length !== 36) return reject("Id invalid"); if (data.id.length !== 36) return reject("Id invalid");
try { try {
const _template = ` handler.factorize({
${data.slug_name ? "`slug_name` = ?," : null} values: data,
${data.display_name ? "`display_name` = ?," : null} actionName: `Update user ID::${data.id}`
${data.image_blob ? "`slug_name` = ?," : null}`; })
const _values = [
data.slug_name,
data.display_name,
data.image_blob,
data.id,
];
const _sql = `UPDATE "brands" SET ${_template} WHERE 'id' = ?`; const _sql = `UPDATE "brands" SET ${_template} WHERE 'id' = ?`;
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
return resolve(result as unknown as IDbStatusResult); return resolve(result as unknown as IDbStatusResult);