diff --git a/src/services/mysql.service.ts b/src/services/mysql.service.ts index 85a5e1f..0c578d3 100644 --- a/src/services/mysql.service.ts +++ b/src/services/mysql.service.ts @@ -5,10 +5,7 @@ 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 mysql, { - type Connection, - type ConnectionOptions, -} from "mysql2"; +import mysql, { type Connection, type ConnectionOptions } from "mysql2"; import { Logger } from "tslog"; const access: ConnectionOptions = { @@ -35,9 +32,7 @@ class MysqlHandler { this.Logger.error(`Error connecting to MySQL: ${err}`); process.exit(1); } - this.Logger.info( - `Connected to MySQL database (${access.database})`, - ); + this.Logger.info(`Connected to MySQL database (${access.database})`); }); } closeConnection() { @@ -65,10 +60,7 @@ class MysqlHandler { this.Connection.execute( queryString, values, - ( - err: mysql.QueryError | null, - results: mysql.QueryResult, - ) => { + (err: mysql.QueryError | null, results: mysql.QueryResult) => { if (err) { this.Logger.error(`Error executing query: ${err}`); reject(err); @@ -114,10 +106,7 @@ const MySqlService = { * @throws {Error} If an error occurs during the execution. * @throws {string} If the `id` field is undefined or invalid. */ - insert( - handler: MysqlHandler, - data: IDbUser, - ): Promise { + insert(handler: MysqlHandler, data: IDbUser): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -138,9 +127,7 @@ const MySqlService = { ]; try { handler.execute(_sql, _values).then((result) => { - return resolve( - result as unknown as IDbStatusResult, - ); + return resolve(result as unknown as IDbStatusResult); }); } catch (err: unknown) { reject(err as Error); @@ -148,10 +135,7 @@ const MySqlService = { }); }, - update( - handler: MysqlHandler, - data: IDbUser, - ): Promise { + update(handler: MysqlHandler, data: IDbUser): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -163,11 +147,7 @@ const MySqlService = { ${data.lastname ? "`lastname` = ?," : null} ${data.dob ? "`dob` = ?," : null} ${data.email ? "`email` = ?," : null} - ${ - data.is_mail_verified - ? "`is_mail_verified` = ?," - : null - } + ${data.is_mail_verified ? "`is_mail_verified` = ?," : null} ${data.is_admin ? "`is_admin` = ?," : null} ${data.gdpr ? "`gdpr` = ?," : null} ${data.hash ? "`hash` = ?" : null}`; @@ -186,9 +166,7 @@ const MySqlService = { const _sql = `UPDATE "users" SET ${_template} WHERE 'id' = ?`; handler.execute(_sql, _values).then((result) => { - return resolve( - result as unknown as IDbStatusResult, - ); + return resolve(result as unknown as IDbStatusResult); }); } catch (err: unknown) { reject(err as Error); @@ -196,10 +174,7 @@ const MySqlService = { }); }, - getById( - handler: MysqlHandler, - userId: string, - ): Promise { + getById(handler: MysqlHandler, userId: string): Promise { return new Promise((resolve, reject) => { if (userId.length !== 36) return reject("Id invalid"); const _sql = "SELECT * FROM `users` WHERE `id` = ?"; @@ -242,10 +217,7 @@ const MySqlService = { * @return {Promise} - A promise that resolves to the retrieved user object. * @throws {Error} - If an error occurs while retrieving the user. */ - getByEmail( - handler: MysqlHandler, - email: string, - ): Promise { + getByEmail(handler: MysqlHandler, email: string): Promise { return new Promise((resolve, reject) => { if (!email) return reject("email is undefined"); const _sql = "SELECT * FROM `users` WHERE `email` = ?"; @@ -273,8 +245,7 @@ const MySqlService = { userId: string, ): Promise { return new Promise((resolve, reject) => { - const _sql = - "SELECT `is_admin` FROM `users` WHERE `id` = ?"; + const _sql = "SELECT `is_admin` FROM `users` WHERE `id` = ?"; const _values = [userId]; try { const isAdmin = handler.execute( @@ -297,17 +268,16 @@ const MySqlService = { * @param {string} userId - The ID of the user to delete. * @return {Promise} - A Promise that resolves when the deletion is successful, or rejects with an error. */ - delete( - handler: MysqlHandler, - userId: string, - ): Promise { + delete(handler: MysqlHandler, userId: string): Promise { return new Promise((resolve, reject) => { if (!userId) return reject("Id is undefined"); if (userId.length !== 36) return reject("Id invalid"); const _sql = "DELETE FROM `users` WHERE `id` = ?"; const _values = [userId]; try { - resolve(handler.execute(_sql, _values)); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -323,10 +293,7 @@ const MySqlService = { * @returns {Promise} - A Promise that resolves to the status result of the insert operation. * @throws {Error} - If an error occurs during the execution of the SQL query. */ - insert( - handler: MysqlHandler, - data: IDbBrand, - ): Promise { + insert(handler: MysqlHandler, data: IDbBrand): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -340,12 +307,7 @@ const MySqlService = { data.image_blob, ]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + resolve(handler.execute(_sql, _values) as unknown as IDbStatusResult); } catch (err: unknown) { reject(err as Error); } @@ -360,10 +322,7 @@ const MySqlService = { * @returns {Promise} - A promise that resolves to the status result of the update operation. * @throws {Error} - If any error occurs during the process. */ - update( - handler: MysqlHandler, - data: IDbBrand, - ): Promise { + update(handler: MysqlHandler, data: IDbBrand): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -381,12 +340,9 @@ const MySqlService = { data.id, ]; const _sql = `UPDATE "brands" SET ${_template} WHERE 'id' = ?`; - return resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -404,9 +360,9 @@ const MySqlService = { return new Promise((resolve, reject) => { const _sql = "SELECT * FROM `brands`"; try { - resolve( - handler.query(_sql) as unknown as Array, - ); + handler.query(_sql).then((result) => { + return resolve(result as unknown as Array); + }); } catch (err: unknown) { reject(err as Error); } @@ -422,22 +378,16 @@ const MySqlService = { * @throws {Error} - If an error occurs during execution * @throws {string} - If brandId is undefined or invalid */ - getById( - handler: MysqlHandler, - brandId: string, - ): Promise { + getById(handler: MysqlHandler, brandId: string): Promise { return new Promise((resolve, reject) => { if (!brandId) return reject("Id is undefined"); if (brandId.length !== 36) return reject("Id invalid"); const _sql = "SELECT * FROM `brands` WHERE `id` = ?"; const _values = [brandId]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbBrand, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbBrand); + }); } catch (err: unknown) { //TODO Reject with null and logger error reject(err as Error); @@ -452,22 +402,15 @@ const MySqlService = { * @param {string} brandSlug - The slug of the brand to retrieve. * @returns {Promise} - A promise that resolves with the brand object if found, or rejects with an error message. */ - getBySlug( - handler: MysqlHandler, - brandSlug: string, - ): Promise { + getBySlug(handler: MysqlHandler, brandSlug: string): Promise { return new Promise((resolve, reject) => { if (!brandSlug) return reject("slug is undefined"); - const _sql = - "SELECT * FROM `brands` WHERE `slug_name` = ?"; + const _sql = "SELECT * FROM `brands` WHERE `slug_name` = ?"; const _values = [brandSlug]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbBrand, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbBrand); + }); } catch (err: unknown) { reject(err as Error); } @@ -482,10 +425,7 @@ const MySqlService = { * @returns {Promise} A promise that resolves to the database status result. * @throws {Error} If an error occurs while deleting the brand. */ - delete( - handler: MysqlHandler, - brandId: string, - ): Promise { + delete(handler: MysqlHandler, brandId: string): Promise { //TODO check if has models linked before actions return new Promise((resolve, reject) => { if (!brandId) return reject("Id is undefined"); @@ -493,12 +433,9 @@ const MySqlService = { const _sql = "DELETE FROM `brands` WHERE `id` = ?"; const _values = [brandId]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -519,9 +456,9 @@ const MySqlService = { return new Promise((resolve, reject) => { const _sql = "SELECT * FROM `models`"; try { - resolve( - handler.query(_sql) as unknown as Array, - ); + handler.query(_sql).then((result) => { + return resolve(result as unknown as Array); + }); } catch (err: unknown) { reject(err as Error); } @@ -536,21 +473,14 @@ const MySqlService = { * @return {Promise} A promise that resolves with the retrieved model. * @throws {Error} If there was an error executing the query. */ - getBySlug( - handler: MysqlHandler, - modelSlug: string, - ): Promise { + getBySlug(handler: MysqlHandler, modelSlug: string): Promise { return new Promise((resolve, reject) => { - const _sql = - "SELECT * FROM `models` WHERE `slug_name` = ?"; + const _sql = "SELECT * FROM `models` WHERE `slug_name` = ?"; const _values = [modelSlug]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbModel, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbModel); + }); } catch (err: unknown) { reject(err as Error); } @@ -564,20 +494,12 @@ const MySqlService = { * @param {string} modelId - The ID of the model to retrieve. * @return {Promise} - A promise that resolves with the retrieved model, or rejects with an error. */ - getById( - handler: MysqlHandler, - modelId: string, - ): Promise { + getById(handler: MysqlHandler, modelId: string): Promise { return new Promise((resolve, reject) => { const _sql = "SELECT * FROM `models` WHERE `id` = ?"; const _values = [modelId]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbModel, - ); + resolve(handler.execute(_sql, _values) as unknown as IDbModel); } catch (err: unknown) { reject(err as Error); } @@ -592,10 +514,7 @@ const MySqlService = { * @throws {string} - Throws an error message if the id is undefined or invalid. * @returns {Promise} - A promise that resolves to the status result of the insert operation. */ - insert( - handler: MysqlHandler, - data: IDbModel, - ): Promise { + insert(handler: MysqlHandler, data: IDbModel): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -613,12 +532,9 @@ const MySqlService = { data.id, ]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -635,10 +551,7 @@ const MySqlService = { * @return {Promise} - A promise that resolves to the status result of the update operation. * @throws {Error} - If an error occurs during the update process. */ - update( - handler: MysqlHandler, - data: IDbModel, - ): Promise { + update(handler: MysqlHandler, data: IDbModel): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -664,12 +577,9 @@ const MySqlService = { data.id, ]; const _sql = `UPDATE "models" SET ${_template} WHERE 'id' = ?`; - return resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -684,10 +594,7 @@ const MySqlService = { * @returns {Promise} A promise that resolves to the result of the delete operation. * @throws {Error} If an error occurs during the delete operation. */ - delete( - handler: MysqlHandler, - modelId: string, - ): Promise { + delete(handler: MysqlHandler, modelId: string): Promise { //TODO check if has models linked before actions return new Promise((resolve, reject) => { if (!modelId) return reject("Id is undefined"); @@ -695,12 +602,9 @@ const MySqlService = { const _sql = "DELETE FROM `models` WHERE `id` = ?"; const _values = [modelId]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -715,10 +619,7 @@ const MySqlService = { * @throws Throws an error if the provided `data` object does not contain the `id` property or if the `id` is not a valid UUID. * @returns {Promise} A promise that resolves to the result of the insert operation. */ - insert( - handler: MysqlHandler, - data: IDbVehicle, - ): Promise { + insert(handler: MysqlHandler, data: IDbVehicle): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -733,12 +634,9 @@ const MySqlService = { data.id, ]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -753,10 +651,7 @@ const MySqlService = { * @throws {string} Throws an error if the id is undefined or invalid. * @returns {Promise} Returns a Promise that resolves to the status result of the update operation. */ - update( - handler: MysqlHandler, - data: IDbVehicle, - ): Promise { + update(handler: MysqlHandler, data: IDbVehicle): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -766,9 +661,7 @@ const MySqlService = { ${data.model_id ? "`model_id` = ?," : null} ${data.plate_number ? "`plate_number` = ?," : null} ${data.odometer ? "`odometer` = ?," : null} - ${ - data.health_state ? "`health_state` = ?," : null - }`; + ${data.health_state ? "`health_state` = ?," : null}`; const _values = [ data.model_id, @@ -778,12 +671,9 @@ const MySqlService = { data.id, ]; const _sql = `UPDATE "vehicles" SET ${_template} WHERE 'id' = ?`; - return resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbStatusResult, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -798,23 +688,16 @@ const MySqlService = { * @returns {Promise} - A promise that resolves to the retrieved vehicle. * @throws {Error} - If an error occurs while retrieving the vehicle. */ - getById( - handler: MysqlHandler, - vehicleId: string, - ): Promise { + getById(handler: MysqlHandler, vehicleId: string): Promise { return new Promise((resolve, reject) => { if (!vehicleId) return reject("Id is undefined"); - if (vehicleId.length !== 36) - return reject("Id invalid"); + if (vehicleId.length !== 36) return reject("Id invalid"); const _sql = "SELECT * FROM `vehicles` WHERE `id` = ?"; const _values = [vehicleId]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbVehicle, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbVehicle); + }); } catch (err: unknown) { reject(err as Error); } @@ -832,9 +715,9 @@ const MySqlService = { return new Promise((resolve, reject) => { const _sql = "SELECT * FROM `models`"; try { - resolve( - handler.query(_sql) as unknown as Array, - ); + handler.query(_sql).then((result) => { + return resolve(result as unknown as Array); + }); } catch (err: unknown) { reject(err as Error); } @@ -848,16 +731,13 @@ const MySqlService = { * @returns {Promise>} A promise that resolves to an array of available vehicles. * @throws {Error} If an error occurs while executing the query. */ - getAvailable( - handler: MysqlHandler, - ): Promise> { + getAvailable(handler: MysqlHandler): Promise> { return new Promise((resolve, reject) => { - const _sql = - "SELECT * FROM `vehicles` WERE `isAvailable` = 1"; + const _sql = "SELECT * FROM `vehicles` WERE `isAvailable` = 1"; try { - resolve( - handler.query(_sql) as unknown as Array, - ); + handler.query(_sql).then((result) => { + return resolve(result as unknown as Array); + }); } catch (err: unknown) { reject(err as Error); } @@ -866,29 +746,25 @@ const MySqlService = { }, Category: { /** - * Inserts a category into the database. + * Insert a category into the database. * - * @param {MysqlHandler} handler - The MySQL handler object. - * @param {IDbCategory} data - The category data to be inserted. - * @return {Promise} - A promise that resolves if the insertion is successful, and rejects with an error if it fails. + * @param {MysqlHandler} handler - The MySQL handler instance. + * @param {IDbCategory} data - The category data to insert. + * @returns {Promise} A promise that resolves to the status result of the insertion. + * @throws {Error} If an error occurs during the execution of the insertion. */ - insert( - handler: MysqlHandler, - data: IDbCategory, - ): Promise { + insert(handler: MysqlHandler, data: IDbCategory): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); const _sql = "INSERT INTO `categories`(`id`,`slug_name`, `display_name`) VALUES (?, ?, ?)"; - const _values = [ - data.id, - data.slug_name, - data.display_name, - ]; + const _values = [data.id, data.slug_name, data.display_name]; try { - resolve(handler.execute(_sql, _values)); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -898,15 +774,11 @@ const MySqlService = { /** * Updates a category in the database. * - * @param {MysqlHandler} handler - The MySQL handler instance. - * @param {IDbCategory} data - The category data to update. - * @returns {Promise} - A promise that resolves with the number of affected rows in the database. - * @throws {Error} - If an error occurs during execution. + * @param {MysqlHandler} handler - The MySQL handler for executing database queries. + * @param {IDbCategory} data - The category data to be updated. + * @returns {Promise} - A promise that resolves to the status result of the update operation. */ - update( - handler: MysqlHandler, - data: IDbCategory, - ): Promise { + update(handler: MysqlHandler, data: IDbCategory): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); if (data.id.length !== 36) return reject("Id invalid"); @@ -914,19 +786,13 @@ const MySqlService = { try { const _template = ` ${data.slug_name ? "`slug_name` = ?," : null} - ${ - data.display_name ? "`display_name` = ?," : null - }`; + ${data.display_name ? "`display_name` = ?," : null}`; - const _values = [ - data.slug_name, - data.display_name, - data.id, - ]; + const _values = [data.slug_name, data.display_name, data.id]; const _sql = `UPDATE "categories" SET ${_template} WHERE 'id' = ?`; - return resolve( - handler.execute(_sql, _values) as unknown as number, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); } @@ -937,19 +803,16 @@ const MySqlService = { * * @param {MysqlHandler} handler - The MySQL handler used for executing the query. * - * @return {Promise>} - A promise that resolves with an array of category objects from the database. - * - The category objects are of type IDbCategory. - * - If an error occurs, the promise will be rejected with an Error object. + * @return {Promise>} + * - A promise that resolves with an array of category objects from the database. + * - The category objects are of type IDbCategory. + * - If an error occurs, the promise will be rejected with an Error object. */ getAll(handler: MysqlHandler): Promise> { return new Promise((resolve, reject) => { const _sql = "SELECT * FROM `categories`"; try { - resolve( - handler.query( - _sql, - ) as unknown as Array, - ); + resolve(handler.query(_sql) as unknown as Array); } catch (err: unknown) { reject(err as Error); } @@ -969,16 +832,12 @@ const MySqlService = { ): Promise { return new Promise((resolve, reject) => { if (!categorySlug) return reject("slug is undefined"); - const _sql = - "SELECT * FROM `categories` WHERE `slug_name` = ?"; + const _sql = "SELECT * FROM `categories` WHERE `slug_name` = ?"; const _values = [categorySlug]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbCategory, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbCategory); + }); } catch (err: unknown) { reject(err as Error); } @@ -992,38 +851,41 @@ const MySqlService = { * @returns {Promise} - A Promise that resolves with the category object. * @throws {Error} - If an error occurs during execution. */ - getById( - handler: MysqlHandler, - categoryId: string, - ): Promise { + getById(handler: MysqlHandler, categoryId: string): Promise { return new Promise((resolve, reject) => { if (!categoryId) return reject("slug is undefined"); - if (categoryId.length !== 36) - return reject("Id invalid"); - const _sql = - "SELECT * FROM `categories` WHERE `id` = ?"; + if (categoryId.length !== 36) return reject("Id invalid"); + const _sql = "SELECT * FROM `categories` WHERE `id` = ?"; const _values = [categoryId]; try { - resolve( - handler.execute( - _sql, - _values, - ) as unknown as IDbCategory, - ); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbCategory); + }); } catch (err: unknown) { reject(err as Error); } }); }, + + /** + * Deletes a category from the database based on the given categoryId. + * + * @param {MysqlHandler} handler - The MysqlHandler object for executing database queries. + * @param {string} categoryId - The ID of the category to be deleted. + * + * @returns {Promise} - A promise that resolves to the database status result after deletion. + * @throws {Error} - If an error occurs while executing the deletion query. + */ delete(handler: MysqlHandler, categoryId: string) { return new Promise((resolve, reject) => { if (!categoryId) return reject("Id is undefined"); - if (categoryId.length !== 36) - return reject("Id invalid"); + if (categoryId.length !== 36) return reject("Id invalid"); const _sql = "DELETE FROM `categories` WHERE `id` = ?"; const _values = [categoryId]; try { - resolve(handler.execute(_sql, _values)); + handler.execute(_sql, _values).then((result) => { + return resolve(result as unknown as IDbStatusResult); + }); } catch (err: unknown) { reject(err as Error); }