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