feat(services): update CRUD operations in mysql.service.ts

In this commit:
- Implemented factorize method to standardize data processing and update operations for users, brands, models, categories, and rents.
- Updated SQL syntax to improve code hygiene and readability.
- Added debug mode checks to improve performance in production.
- Added exception handling for possible errors during SQL query execution.
- Added additional methods to get assigned vehicles to a user and all assigned vehicles from the database.
- Added missing delete method for vehicle and rent tables.

Issue: #23 & #21
Signed-off-by: Mathis <yidhra@tuta.io>
This commit is contained in:
Mathis H (Avnyr) 2024-05-03 10:30:57 +02:00
parent 1c643b3625
commit da028ea2c4
Signed by: Mathis
GPG Key ID: DD9E0666A747D126

View File

@ -6,6 +6,7 @@ import type {
IDbFactorizeOutput, IDbFactorizeOutput,
} from "@interfaces/database/IDbFactorize"; } from "@interfaces/database/IDbFactorize";
import type { IDbModel } from "@interfaces/database/IDbModel"; import type { IDbModel } from "@interfaces/database/IDbModel";
import type IDbRent from "@interfaces/database/IDbRent";
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";
@ -180,7 +181,6 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
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");
handler handler
.factorize({ .factorize({
values: data, values: data,
@ -194,8 +194,9 @@ const MySqlService = {
})`; })`;
try { try {
handler.Logger.trace(_sql); if (isDebugMode()) handler.Logger.trace(_sql);
handler.Logger.trace(valuesArray); if (isDebugMode()) handler.Logger.trace(valuesArray);
//ToTest
handler.execute(_sql, valuesArray).then((result) => { handler.execute(_sql, valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult); return resolve(result as unknown as IDbStatusResult);
}); });
@ -224,13 +225,26 @@ const MySqlService = {
handler handler
.factorize({ .factorize({
values: data, values: data,
actionName: `Update user ID::${data.id}`, actionName: "Update user..",
}) })
.then((result) => { .then((factorizeResult) => {
const _sql = `UPDATE "users" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`; const _sql = `UPDATE users SET (${factorizeResult._keysTemplate}) WERE id VALUES(${
handler.execute(_sql, result._valuesArray).then((result) => { factorizeResult._questionMarksFields
return resolve(result as unknown as IDbStatusResult); })`;
});
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode())
handler.Logger.trace(factorizeResult._valuesArray);
//ToTest
handler
.execute(_sql, factorizeResult._valuesArray)
.then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
}); });
} catch (err: unknown) { } catch (err: unknown) {
reject(err as Error); reject(err as Error);
@ -238,10 +252,19 @@ const MySqlService = {
}); });
}, },
//ToTest
/**
* Retrieves user information from the database based on the provided user ID.
*
* @param {MysqlHandler} handler - The MySQL handler instance.
* @param {string} userId - The user ID used to locate the user in the database.
* @returns {Promise<Array<IDbUser>>} A promise that resolves with an array of user objects matching the provided user ID.
* @throws {string} Throws an error if the provided user ID is invalid.
* @throws {Error} Throws*/
getById(handler: MysqlHandler, userId: string): Promise<Array<IDbUser>> { getById(handler: MysqlHandler, userId: string): Promise<Array<IDbUser>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (userId.length !== 36) return reject("Id invalid"); if (userId.length !== 36) return reject("Id invalid");
const _sql = "SELECT * FROM `users` WHERE `id` = ?"; const _sql = "SELECT * FROM users WHERE id VALUES(?)";
const _values = [userId]; const _values = [userId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -253,6 +276,7 @@ const MySqlService = {
}); });
}, },
//ToTest
/** /**
* Retrieves all users from the database. * Retrieves all users from the database.
* *
@ -262,7 +286,7 @@ const MySqlService = {
*/ */
getAll(handler: MysqlHandler): Promise<Array<IDbUser>> { getAll(handler: MysqlHandler): Promise<Array<IDbUser>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `users`"; const _sql = "SELECT * FROM users";
try { try {
handler.query(_sql).then((result) => { handler.query(_sql).then((result) => {
return resolve(result as unknown as Array<IDbUser>); return resolve(result as unknown as Array<IDbUser>);
@ -284,7 +308,7 @@ const MySqlService = {
getByEmail(handler: MysqlHandler, email: string): Promise<Array<IDbUser>> { getByEmail(handler: MysqlHandler, email: string): Promise<Array<IDbUser>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!email) return reject("email is undefined"); if (!email) return reject("email is undefined");
const _sql = "SELECT * FROM `users` WHERE `email` = ?"; const _sql = "SELECT * FROM users WHERE email VALUES(?)";
const _values = [email]; const _values = [email];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -296,6 +320,7 @@ const MySqlService = {
}); });
}, },
//ToTest
/** /**
* Retrieves the admin state for a given user ID. * Retrieves the admin state for a given user ID.
* *
@ -309,9 +334,10 @@ const MySqlService = {
userId: string, userId: string,
): Promise<boolean> { ): Promise<boolean> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT `is_admin` FROM `users` WHERE `id` = ?"; const _sql = "SELECT is_admin FROM users WHERE id VALUES(?)";
const _values = [userId]; const _values = [userId];
try { try {
//FIX Output type
const isAdmin = handler.execute( const isAdmin = handler.execute(
_sql, _sql,
_values, _values,
@ -336,7 +362,7 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!userId) return reject("Id is undefined"); if (!userId) return reject("Id is undefined");
if (userId.length !== 36) return reject("Id invalid"); if (userId.length !== 36) return reject("Id invalid");
const _sql = "DELETE FROM `users` WHERE `id` = ?"; const _sql = "DELETE FROM users WHERE id VALUES(?)";
const _values = [userId]; const _values = [userId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -361,20 +387,29 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
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");
handler
.factorize({
values: data,
actionName: "Inserting new brand",
})
.then((result) => {
const valuesArray = result._valuesArray;
const template = result._keysTemplate;
const _sql = `INSERT INTO brands (${template + `, id`}) VALUES(${
result._questionMarksFields
})`;
const _sql = try {
"INSERT INTO `brands`(`id`,`display_name`, `slug_name`, `image_blob`) VALUES (?, ?, ?, ?)"; if (isDebugMode()) handler.Logger.trace(_sql);
const _values = [ if (isDebugMode()) handler.Logger.trace(valuesArray);
data.id, //ToTest
data.display_name, handler.execute(_sql, valuesArray).then((result) => {
data.slug_name, return resolve(result as unknown as IDbStatusResult);
data.image_blob, });
]; } catch (err: unknown) {
try { reject(err as Error);
resolve(handler.execute(_sql, _values) as unknown as IDbStatusResult); }
} catch (err: unknown) { });
reject(err as Error);
}
}); });
}, },
@ -394,13 +429,26 @@ const MySqlService = {
handler handler
.factorize({ .factorize({
values: data, values: data,
actionName: `Update brand ID::${data.id}`, actionName: "Update brand..",
}) })
.then((result) => { .then((factorizeResult) => {
const _sql = `UPDATE "brands" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`; const _sql = `UPDATE brands SET (${factorizeResult._keysTemplate}) WERE id VALUES(${
handler.execute(_sql, result._valuesArray).then((result) => { factorizeResult._questionMarksFields
return resolve(result as unknown as IDbStatusResult); })`;
});
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode())
handler.Logger.trace(factorizeResult._valuesArray);
//ToTest
handler
.execute(_sql, factorizeResult._valuesArray)
.then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
}); });
} catch (err: unknown) { } catch (err: unknown) {
reject(err as Error); reject(err as Error);
@ -417,7 +465,7 @@ const MySqlService = {
*/ */
getAll(handler: MysqlHandler): Promise<Array<IDbBrand>> { getAll(handler: MysqlHandler): Promise<Array<IDbBrand>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `brands`"; const _sql = "SELECT * FROM brands";
try { try {
handler.query(_sql).then((result) => { handler.query(_sql).then((result) => {
return resolve(result as unknown as Array<IDbBrand>); return resolve(result as unknown as Array<IDbBrand>);
@ -441,7 +489,7 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!brandId) return reject("Id is undefined"); if (!brandId) return reject("Id is undefined");
if (brandId.length !== 36) return reject("Id invalid"); if (brandId.length !== 36) return reject("Id invalid");
const _sql = "SELECT * FROM `brands` WHERE `id` = ?"; const _sql = "SELECT * FROM brands WHERE id VALUES(?)";
const _values = [brandId]; const _values = [brandId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -464,7 +512,7 @@ const MySqlService = {
getBySlug(handler: MysqlHandler, brandSlug: string): Promise<IDbBrand> { getBySlug(handler: MysqlHandler, brandSlug: string): Promise<IDbBrand> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!brandSlug) return reject("slug is undefined"); if (!brandSlug) return reject("slug is undefined");
const _sql = "SELECT * FROM `brands` WHERE `slug_name` = ?"; const _sql = "SELECT * FROM brands WHERE slug_name VALUES(?)";
const _values = [brandSlug]; const _values = [brandSlug];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -489,7 +537,7 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!brandId) return reject("Id is undefined"); if (!brandId) return reject("Id is undefined");
if (brandId.length !== 36) return reject("Id invalid"); if (brandId.length !== 36) return reject("Id invalid");
const _sql = "DELETE FROM `brands` WHERE `id` = ?"; const _sql = "DELETE FROM brands WHERE id VALUES(?)";
const _values = [brandId]; const _values = [brandId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -513,7 +561,7 @@ const MySqlService = {
*/ */
getAll(handler: MysqlHandler): Promise<Array<IDbModel>> { getAll(handler: MysqlHandler): Promise<Array<IDbModel>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `models`"; const _sql = "SELECT * FROM models";
try { try {
handler.query(_sql).then((result) => { handler.query(_sql).then((result) => {
return resolve(result as unknown as Array<IDbModel>); return resolve(result as unknown as Array<IDbModel>);
@ -534,7 +582,7 @@ const MySqlService = {
*/ */
getBySlug(handler: MysqlHandler, modelSlug: string): Promise<IDbModel> { getBySlug(handler: MysqlHandler, modelSlug: string): Promise<IDbModel> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `models` WHERE `slug_name` = ?"; const _sql = "SELECT * FROM models WHERE slug_name VALUES(?)";
const _values = [modelSlug]; const _values = [modelSlug];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -555,7 +603,7 @@ const MySqlService = {
*/ */
getById(handler: MysqlHandler, modelId: string): Promise<IDbModel> { getById(handler: MysqlHandler, modelId: string): Promise<IDbModel> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `models` WHERE `id` = ?"; const _sql = "SELECT * FROM models WHERE id VALUES(?)";
const _values = [modelId]; const _values = [modelId];
try { try {
resolve(handler.execute(_sql, _values) as unknown as IDbModel); resolve(handler.execute(_sql, _values) as unknown as IDbModel);
@ -577,26 +625,29 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
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");
handler
.factorize({
values: data,
actionName: "Inserting new model",
})
.then((factorizedResult) => {
const valuesArray = factorizedResult._valuesArray;
const template = factorizedResult._keysTemplate;
const _sql = `INSERT INTO users (${template + `, id`}) VALUES(${
factorizedResult._questionMarksFields
})`;
const _sql = try {
"INSERT INTO `models`(`slug_name`,`display_name`, `brand_id`, `category_id`, `image_blob`, `is_trending`, `base_price`, `id`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; if (isDebugMode()) handler.Logger.trace(_sql);
const _values = [ if (isDebugMode()) handler.Logger.trace(valuesArray);
data.slug_name, //ToTest
data.display_name, handler.execute(_sql, valuesArray).then((result) => {
data.brand_id, return resolve(result as unknown as IDbStatusResult);
data.category_id, });
data.image_blob, } catch (err: unknown) {
data.is_trending, reject(err as Error);
data.base_price, }
data.id,
];
try {
handler.execute(_sql, _values).then((result) => {
return resolve(result as unknown as IDbStatusResult);
}); });
} catch (err: unknown) {
reject(err as Error);
}
}); });
}, },
@ -618,13 +669,26 @@ const MySqlService = {
handler handler
.factorize({ .factorize({
values: data, values: data,
actionName: `Update users ID::${data.id}`, actionName: "Update model..",
}) })
.then((result) => { .then((factorizeResult) => {
const _sql = `UPDATE "users" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`; const _sql = `UPDATE models SET (${factorizeResult._keysTemplate}) WERE id VALUES(${
handler.execute(_sql, result._valuesArray).then((result) => { factorizeResult._questionMarksFields
return resolve(result as unknown as IDbStatusResult); })`;
});
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode())
handler.Logger.trace(factorizeResult._valuesArray);
//ToTest
handler
.execute(_sql, factorizeResult._valuesArray)
.then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
}); });
} catch (err: unknown) { } catch (err: unknown) {
reject(err as Error); reject(err as Error);
@ -645,7 +709,7 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!modelId) return reject("Id is undefined"); if (!modelId) return reject("Id is undefined");
if (modelId.length !== 36) return reject("Id invalid"); if (modelId.length !== 36) return reject("Id invalid");
const _sql = "DELETE FROM `models` WHERE `id` = ?"; const _sql = "DELETE FROM models WHERE id VALUES(?)";
const _values = [modelId]; const _values = [modelId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -669,23 +733,29 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
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");
handler
.factorize({
values: data,
actionName: "Inserting new vehicle",
})
.then((factorizedResult) => {
const valuesArray = factorizedResult._valuesArray;
const template = factorizedResult._keysTemplate;
const _sql = `INSERT INTO models (${template + `, id`}) VALUES(${
factorizedResult._questionMarksFields
})`;
const _sql = try {
"INSERT INTO `vehicles`(`model_id`, `plate_number`, `odometer`, `health_state`, `id`) VALUES (?, ?, ?, ?, ?)"; if (isDebugMode()) handler.Logger.trace(_sql);
const _values = [ if (isDebugMode()) handler.Logger.trace(valuesArray);
data.model_id, //ToTest
data.plate_number, handler.execute(_sql, valuesArray).then((result) => {
data.odometer, return resolve(result as unknown as IDbStatusResult);
data.health_state, });
data.id, } catch (err: unknown) {
]; reject(err as Error);
try { }
handler.execute(_sql, _values).then((result) => {
return resolve(result as unknown as IDbStatusResult);
}); });
} catch (err: unknown) {
reject(err as Error);
}
}); });
}, },
@ -705,13 +775,26 @@ const MySqlService = {
handler handler
.factorize({ .factorize({
values: data, values: data,
actionName: `Update vehicle ID::${data.id}`, actionName: "Update vehicle..",
}) })
.then((result) => { .then((factorizeResult) => {
const _sql = `UPDATE "vehicles" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`; const _sql = `UPDATE vehicles SET (${factorizeResult._keysTemplate}) WERE id VALUES(${
handler.execute(_sql, result._valuesArray).then((result) => { factorizeResult._questionMarksFields
return resolve(result as unknown as IDbStatusResult); })`;
});
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode())
handler.Logger.trace(factorizeResult._valuesArray);
//ToTest
handler
.execute(_sql, factorizeResult._valuesArray)
.then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
}); });
} catch (err: unknown) { } catch (err: unknown) {
reject(err as Error); reject(err as Error);
@ -731,7 +814,7 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!vehicleId) return reject("Id is undefined"); 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 _sql = "SELECT * FROM vehicles WHERE id VALUES(?)";
const _values = [vehicleId]; const _values = [vehicleId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -752,7 +835,7 @@ const MySqlService = {
*/ */
getAll(handler: MysqlHandler): Promise<Array<IDbVehicle>> { getAll(handler: MysqlHandler): Promise<Array<IDbVehicle>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `models`"; const _sql = "SELECT * FROM models";
try { try {
handler.query(_sql).then((result) => { handler.query(_sql).then((result) => {
return resolve(result as unknown as Array<IDbVehicle>); return resolve(result as unknown as Array<IDbVehicle>);
@ -772,7 +855,7 @@ const MySqlService = {
*/ */
getAvailable(handler: MysqlHandler): Promise<Array<IDbVehicle>> { getAvailable(handler: MysqlHandler): Promise<Array<IDbVehicle>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `vehicles` WERE `isAvailable` = 1"; const _sql = "SELECT * FROM vehicles WERE isAvailable = 1";
try { try {
handler.query(_sql).then((result) => { handler.query(_sql).then((result) => {
return resolve(result as unknown as Array<IDbVehicle>); return resolve(result as unknown as Array<IDbVehicle>);
@ -783,7 +866,21 @@ const MySqlService = {
}); });
}, },
//TODO DELETE delete(handler: MysqlHandler, vehicleId: string): Promise<IDbStatusResult> {
return new Promise((resolve, reject) => {
if (!vehicleId) return reject("Id is undefined");
if (vehicleId.length !== 36) return reject("Id invalid");
const _sql = "DELETE FROM vehicle WHERE id VALUES(?)";
const _values = [vehicleId];
try {
handler.execute(_sql, _values).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
});
},
}, },
Category: { Category: {
/** /**
@ -798,17 +895,29 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
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");
handler
.factorize({
values: data,
actionName: "Inserting new category",
})
.then((factorizedResult) => {
const valuesArray = factorizedResult._valuesArray;
const template = factorizedResult._keysTemplate;
const _sql = `INSERT INTO categories (${template + `, id`}) VALUES(${
factorizedResult._questionMarksFields
})`;
const _sql = try {
"INSERT INTO `categories`(`id`,`slug_name`, `display_name`) VALUES (?, ?, ?)"; if (isDebugMode()) handler.Logger.trace(_sql);
const _values = [data.id, data.slug_name, data.display_name]; if (isDebugMode()) handler.Logger.trace(valuesArray);
try { //ToTest
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult); return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
}); });
} catch (err: unknown) {
reject(err as Error);
}
}); });
}, },
@ -827,13 +936,26 @@ const MySqlService = {
handler handler
.factorize({ .factorize({
values: data, values: data,
actionName: `Update category ID::${data.id}`, actionName: "Update brand..",
}) })
.then((result) => { .then((factorizeResult) => {
const _sql = `UPDATE "categories" SET ${result._keysTemplate} WHERE 'id' = '${data.id}'`; const _sql = `UPDATE categories SET (${factorizeResult._keysTemplate}) WERE id VALUES(${
handler.execute(_sql, result._valuesArray).then((result) => { factorizeResult._questionMarksFields
return resolve(result as unknown as IDbStatusResult); })`;
});
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode())
handler.Logger.trace(factorizeResult._valuesArray);
//ToTest
handler
.execute(_sql, factorizeResult._valuesArray)
.then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
}); });
} catch (err: unknown) { } catch (err: unknown) {
reject(err as Error); reject(err as Error);
@ -852,7 +974,7 @@ const MySqlService = {
*/ */
getAll(handler: MysqlHandler): Promise<Array<IDbCategory>> { getAll(handler: MysqlHandler): Promise<Array<IDbCategory>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const _sql = "SELECT * FROM `categories`"; const _sql = "SELECT * FROM categories";
try { try {
resolve(handler.query(_sql) as unknown as Array<IDbCategory>); resolve(handler.query(_sql) as unknown as Array<IDbCategory>);
} catch (err: unknown) { } catch (err: unknown) {
@ -874,7 +996,7 @@ const MySqlService = {
): Promise<IDbCategory> { ): Promise<IDbCategory> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!categorySlug) return reject("slug is undefined"); if (!categorySlug) return reject("slug is undefined");
const _sql = "SELECT * FROM `categories` WHERE `slug_name` = ?"; const _sql = "SELECT * FROM categories WHERE slug_name VALUES(?)";
const _values = [categorySlug]; const _values = [categorySlug];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -897,7 +1019,7 @@ const MySqlService = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!categoryId) return reject("slug is undefined"); if (!categoryId) return reject("slug is undefined");
if (categoryId.length !== 36) return reject("Id invalid"); if (categoryId.length !== 36) return reject("Id invalid");
const _sql = "SELECT * FROM `categories` WHERE `id` = ?"; const _sql = "SELECT * FROM categories WHERE id VALUES(?)";
const _values = [categoryId]; const _values = [categoryId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -918,11 +1040,14 @@ const MySqlService = {
* @returns {Promise<IDbStatusResult>} - A promise that resolves to the database status result after deletion. * @returns {Promise<IDbStatusResult>} - A promise that resolves to the database status result after deletion.
* @throws {Error} - If an error occurs while executing the deletion query. * @throws {Error} - If an error occurs while executing the deletion query.
*/ */
delete(handler: MysqlHandler, categoryId: string) { delete(
handler: MysqlHandler,
categoryId: string,
): Promise<IDbStatusResult> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!categoryId) return reject("Id is undefined"); 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 _sql = "DELETE FROM categories WHERE id VALUES(?)";
const _values = [categoryId]; const _values = [categoryId];
try { try {
handler.execute(_sql, _values).then((result) => { handler.execute(_sql, _values).then((result) => {
@ -933,7 +1058,163 @@ const MySqlService = {
} }
}); });
}, },
//TODO Get models in category //ToTest
/**
* Retrieves all models from a specific category.
*
* @param {MysqlHandler} handler - The MySQL handler object used for executing the query.
* @param {string} categoryId - The ID of the category.
* @return {Promise<Array<IDbModel>>} - A promise that resolves to an array of database models belonging to the specified category.
*/
getAllModelsFromCategory(handler: MysqlHandler, categoryId: string): Promise<Array<IDbModel>> {
return new Promise((resolve, reject) => {
const _sql =
"SELECT models.* FROM models INNER JOIN categories ON models.category_id = categories.id WHERE categories.id VALUES(?)";
try {
handler.execute(_sql, [categoryId]).then((result) => {
return resolve(result as unknown as Array<IDbModel>);
});
} catch (err: unknown) {
reject(err as Error);
}
});
},
},
Rent: {
//ToTest
insert(handler: MysqlHandler, data: IDbRent): Promise<IDbStatusResult> {
return new Promise((resolve, reject) => {
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
handler
.factorize({
values: data,
actionName: "Inserting new rent",
})
.then((factorizedResult) => {
const valuesArray = factorizedResult._valuesArray;
const template = factorizedResult._keysTemplate;
const _sql = `INSERT INTO rents (${template + `, id`}) VALUES(${
factorizedResult._questionMarksFields
})`;
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode()) handler.Logger.trace(valuesArray);
//ToTest
handler.execute(_sql, valuesArray).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
});
});
},
//ToTest
/**
* Retrieves the assigned vehicles for a given user.
*
* @param {MysqlHandler} handler - The MySQL handler used to execute the database query.
* @param {string} userId - The ID of the user.
* @returns {Promise<Array<IDbVehicle>>} A promise that resolves to an array of assigned vehicles.
* @throws {Error} If an error occurs during the execution of the query.
* @throws {string} If the user ID is undefined or invalid.
*/
getAssignedToUser(
handler: MysqlHandler,
userId: string,
): Promise<Array<IDbVehicle>> {
return new Promise((resolve, reject) => {
if (!userId) return reject("Id is undefined");
if (userId.length !== 36) return reject("Id invalid");
const _sql =
"SELECT vehicle.* FROM rent JOIN vehicles ON rent.vehicle_id = vehicles.id WHERE user_id AND active = 1 VALUES(?)";
const _values = [userId];
try {
handler.execute(_sql, _values).then((result) => {
return resolve(result as unknown as Array<IDbVehicle>);
});
} catch (err: unknown) {
reject(err as Error);
}
});
},
/**
* Retrieves all assigned vehicles from the database.
*
* @param {MysqlHandler} handler - The MySQL handler object used for executing the query.
*
* @returns {Promise<Array<IDbVehicle>>} A Promise that resolves with an array of assigned vehicles.
* @throws {Error} If an error occurs during query execution or result conversion.
*/
getAllAssigned(handler: MysqlHandler): Promise<Array<IDbVehicle>> {
return new Promise((resolve, reject) => {
const _sql =
"SELECT vehicle.* FROM rent JOIN vehicles ON rent.vehicle_id = vehicles.id WHERE active = 1";
try {
handler.query(_sql).then((result) => {
return resolve(result as unknown as Array<IDbVehicle>);
});
} catch (err: unknown) {
reject(err as Error);
}
});
},
update(handler: MysqlHandler, data: IDbRent): Promise<IDbStatusResult> {
return new Promise((resolve, reject) => {
if (!data.id) return reject("Id is undefined");
if (data.id.length !== 36) return reject("Id invalid");
try {
handler
.factorize({
values: data,
actionName: "Update rent..",
})
.then((factorizeResult) => {
const _sql = `UPDATE rents SET (${factorizeResult._keysTemplate}) WERE id = ? VALUES(${factorizeResult._questionMarksFields})`;
try {
if (isDebugMode()) handler.Logger.trace(_sql);
if (isDebugMode())
handler.Logger.trace(factorizeResult._valuesArray);
//ToTest
handler
.execute(_sql, factorizeResult._valuesArray)
.then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
});
} catch (err: unknown) {
reject(err as Error);
}
});
},
delete(
handler: MysqlHandler,
rentId: string,
): Promise<IDbStatusResult> {
return new Promise((resolve, reject) => {
if (!rentId) return reject("Id is undefined");
if (rentId.length !== 36) return reject("Id invalid");
const _sql = "DELETE FROM rents WHERE id VALUES(?)";
const _values = [rentId];
try {
handler.execute(_sql, _values).then((result) => {
return resolve(result as unknown as IDbStatusResult);
});
} catch (err: unknown) {
reject(err as Error);
}
});
},
}, },
}; };