feat(services): enhance readability and update factorize function for various elements in mysql.service

- The readability within mysql.service.ts file is improved by formatting multi-line functions.
- The factorize function for 'users', 'brands', 'vehicles', and 'categories' has been updated to enhance code quality.
- Import statements were restructured for better readability.

Signed-off-by: Mathis <yidhra@tuta.io>
This commit is contained in:
Mathis H (Avnyr) 2024-04-30 16:51:55 +02:00
parent cb1c2ee87c
commit d7f9cb0b37
Signed by: Mathis
GPG Key ID: DD9E0666A747D126

View File

@ -1,14 +1,17 @@
import process from "node:process";
import type { IDbBrand } from "@interfaces/database/IDbBrand";
import type { IDbCategory } from "@interfaces/database/IDbCategory";
import type {
IDbFactorizeInput,
IDbFactorizeOutput,
} from "@interfaces/database/IDbFactorize";
import type { IDbModel } from "@interfaces/database/IDbModel";
import type { IDbStatusResult } from "@interfaces/database/IDbStatusResult";
import type { IDbUser } from "@interfaces/database/IDbUser";
import type { IDbVehicle } from "@interfaces/database/IDbVehicle";
import type { IUserUpdate } from "@interfaces/services/IUserUpdate";
import mysql, { type Connection, type ConnectionOptions } from "mysql2";
import { Logger } from "tslog";
import {IUserUpdate} from "@interfaces/services/IUserUpdate";
import {IDbFactorizeInput, IDbFactorizeOutput} from "@interfaces/database/IDbFactorize";
const access: ConnectionOptions = {
host: `${process.env["MYSQL_HOST"]}`,
@ -34,7 +37,9 @@ class MysqlHandler {
this.Logger.error(`Error connecting to MySQL: ${err}`);
process.exit(1);
}
this.Logger.info(`\n\n> Connected to MySQL database (${access.database})\n`);
this.Logger.info(
`\n\n> Connected to MySQL database (${access.database})\n`,
);
});
}
closeConnection() {
@ -62,27 +67,31 @@ class MysqlHandler {
* @return {Promise<IDbFactorizeOutput>} - A promise resolving to the factorized output.
*/
factorize(data: IDbFactorizeInput): Promise<IDbFactorizeOutput> {
return new Promise((resolve, reject)=>{
return new Promise((resolve, reject) => {
try {
// @ts-ignore
data.values.id ? delete data.values.id : null;
const _sqlQueryKeys = Object.keys(data.values).map((key: string) => `\'${key}\' = ?`)
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(', ')
const _sqlQueryKeys = Object.keys(data.values).map(
(key: string) => `\'${key}\' = ?`,
);
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(", ");
const factorizedOutput: IDbFactorizeOutput = {
_keysTemplate: sqlQueryKeys,
totalFields: _sqlQueryKeys.length,
_valuesArray: values
}
_valuesArray: values,
};
resolve(factorizedOutput);
} catch (err) {
if (data.throwOnError) throw new Error(`${err}`)
this.Logger.error(`\n|\n${err}\n|`)
reject(`${err}`)
if (data.throwOnError) throw new Error(`${err}`);
this.Logger.error(`\n|\n${err}\n|`);
reject(`${err}`);
}
})
});
}
/**
@ -184,20 +193,22 @@ const MySqlService = {
update(handler: MysqlHandler, data: IUserUpdate): Promise<IDbStatusResult> {
return new Promise((resolve, reject) => {
if (data.gdpr && typeof data.gdpr !== typeof Date) {
return reject("Invalid gdpr date.")
return reject("Invalid gdpr date.");
}
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
try {
handler.factorize({
values: data,
actionName: `Update user ID::${data.id}`
}).then((result)=>{
const _sql = `UPDATE "users" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
handler
.factorize({
values: data,
actionName: `Update user ID::${data.id}`,
})
.then((result) => {
const _sql = `UPDATE "users" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
});
})
} catch (err: unknown) {
reject(err as Error);
}
@ -357,15 +368,17 @@ const MySqlService = {
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
try {
handler.factorize({
values: data,
actionName: `Update brand ID::${data.id}`
}).then((result)=>{
const _sql = `UPDATE "brands" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
handler
.factorize({
values: data,
actionName: `Update brand ID::${data.id}`,
})
.then((result) => {
const _sql = `UPDATE "brands" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
});
})
} catch (err: unknown) {
reject(err as Error);
}
@ -579,15 +592,17 @@ const MySqlService = {
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
try {
handler.factorize({
values: data,
actionName: `Update users ID::${data.id}`
}).then((result)=>{
const _sql = `UPDATE "users" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
handler
.factorize({
values: data,
actionName: `Update users ID::${data.id}`,
})
.then((result) => {
const _sql = `UPDATE "users" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
});
})
} catch (err: unknown) {
reject(err as Error);
}
@ -664,15 +679,17 @@ const MySqlService = {
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
try {
handler.factorize({
values: data,
actionName: `Update vehicle ID::${data.id}`
}).then((result)=>{
const _sql = `UPDATE "vehicles" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
handler
.factorize({
values: data,
actionName: `Update vehicle ID::${data.id}`,
})
.then((result) => {
const _sql = `UPDATE "vehicles" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
});
})
} catch (err: unknown) {
reject(err as Error);
}
@ -782,15 +799,17 @@ const MySqlService = {
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
try {
handler.factorize({
values: data,
actionName: `Update category ID::${data.id}`
}).then((result)=>{
const _sql = `UPDATE "categories" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
handler
.factorize({
values: data,
actionName: `Update category ID::${data.id}`,
})
.then((result) => {
const _sql = `UPDATE "categories" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`;
handler.execute(_sql, result._valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
});
})
} catch (err: unknown) {
reject(err as Error);
}