parent
1f984f4392
commit
69fae2b780
@ -1,14 +1,14 @@
|
||||
import mysql, {type Connection, type ConnectionOptions} from 'mysql2';
|
||||
import {Logger} from "tslog";
|
||||
// biome-ignore lint/style/useImportType: <explanation>
|
||||
import DbUserData from "@interfaces/UserData";
|
||||
import type {IDbModel} from "@interfaces/database/IDbModel";
|
||||
import type {IDbUser} from "@interfaces/database/IDbUser";
|
||||
|
||||
|
||||
const access: ConnectionOptions = {
|
||||
host: `${process.env["MYSQL_HOST"]}`,
|
||||
port: Number.parseInt(`${process.env["MYSQL_PORT"]}`),
|
||||
user: `${process.env["MYSQL_USER"]}`,
|
||||
database: `${process.env["MYSQL_USER"]}`,
|
||||
database: `${process.env["MYSQL_DATABASE"]}`,
|
||||
password: `${process.env["MYSQL_PASS"]}`
|
||||
};
|
||||
|
||||
@ -83,23 +83,32 @@ class MysqlHandler {
|
||||
const MySqlService = {
|
||||
Handler : MysqlHandler,
|
||||
User: {
|
||||
insert(handler: MysqlHandler, userData: DbUserData) {
|
||||
|
||||
/**
|
||||
* Insert a user into the database.
|
||||
*
|
||||
* @param {MysqlHandler} handler - The MySQL database handler.
|
||||
* @param {IDbUser} userData - The user data to insert.
|
||||
* @returns {Promise<void>} A promise that resolves if the user was inserted successfully, or rejects with an error.
|
||||
* @throws {Error} If an error occurs while executing the query.
|
||||
*/
|
||||
insert(handler: MysqlHandler, userData: IDbUser) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const _now = new Date()
|
||||
const _sql = "INSERT INTO `users`(`username`, `displayName`, `firstName`, `lastName`, `email`, `passwordHash`, `isAdmin`, `isDisabled`, `dob`, `gdpr`, `iat`, `uat`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
if (!userData.id) return reject('Id is undefined');
|
||||
if (userData.id.length !== 36) return reject('Id invalid');
|
||||
|
||||
const _sql = "INSERT INTO `users`(`id`,`username`, `firstname`, `lastname`, `dob`, `email`, `is_mail_verified`, `is_admin`, `gdpr`, `hash`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
const _values = [
|
||||
userData.id,
|
||||
userData.username,
|
||||
userData.displayName,
|
||||
userData.firstName,
|
||||
userData.lastName,
|
||||
userData.email,
|
||||
userData.passwordHash,
|
||||
userData.isAdmin,
|
||||
userData.isDisabled,
|
||||
userData.firstname,
|
||||
userData.lastname,
|
||||
userData.dob,
|
||||
userData.email,
|
||||
userData.is_mail_verified,
|
||||
userData.is_admin,
|
||||
userData.gdpr,
|
||||
_now,
|
||||
_now
|
||||
userData.hash
|
||||
]
|
||||
try {
|
||||
resolve(handler.execute(_sql, _values))
|
||||
@ -109,101 +118,123 @@ const MySqlService = {
|
||||
})
|
||||
},
|
||||
|
||||
update(handler: MysqlHandler, userData: DbUserData) {
|
||||
/**
|
||||
* Updates user data in the database.
|
||||
* @param {MysqlHandler} handler - The MySQL handler object.
|
||||
* @param {IDbUser} userData - The user data to be updated.
|
||||
* @returns {Promise<unknown>} - A promise that resolves when the update is successful.
|
||||
* @throws {Error} - If an error occurs during the update process.
|
||||
*/
|
||||
update(handler: MysqlHandler, userData: IDbUser): Promise<unknown> {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!userData.id) return reject('Id is undefined');
|
||||
if (userData.id.length !== 36) return reject('Id invalid');
|
||||
|
||||
//@ts-ignore
|
||||
const _t = `
|
||||
${userData.username ? "`username` = ?," : null}
|
||||
${userData.displayName ? "`displayName` = ?," : null}
|
||||
${userData.firstName ? "`firstName` = ?," : null}`
|
||||
|
||||
|
||||
|
||||
|
||||
const __sql = "UPDATE `users` SET `lastName` = ?, `email` = ?, `passwordHash` = ?, `isAdmin` = ?, `isDisabled` = ?, `dob` = ?, `gdpr` = ? WHERE `id` = ?";
|
||||
const __values = [
|
||||
userData.username,
|
||||
userData.displayName,
|
||||
userData.firstName,
|
||||
userData.lastName,
|
||||
userData.email,
|
||||
userData.passwordHash,
|
||||
userData.isAdmin,
|
||||
userData.isDisabled,
|
||||
userData.dob,
|
||||
userData.gdpr
|
||||
];
|
||||
try {
|
||||
resolve(handler.execute(__sql, __values));
|
||||
const _template = `
|
||||
${userData.username ? "`username` = ?," : null}
|
||||
${userData.firstname ? "`firstname` = ?," : null}
|
||||
${userData.lastname ? "`lastname` = ?," : null}
|
||||
${userData.dob ? "`dob` = ?," : null}
|
||||
${userData.email ? "`email` = ?," : null}
|
||||
${userData.is_mail_verified ? "`is_mail_verified` = ?," : null}
|
||||
${userData.is_admin ? "`is_admin` = ?," : null}
|
||||
${userData.gdpr ? "`gdpr` = ?," : null}
|
||||
${userData.hash ? "`hash` = ?" : null}`
|
||||
const _values = [
|
||||
userData.username,
|
||||
userData.firstname,
|
||||
userData.lastname,
|
||||
userData.dob,
|
||||
userData.email,
|
||||
userData.is_mail_verified,
|
||||
userData.is_admin,
|
||||
userData.gdpr,
|
||||
userData.hash,
|
||||
userData.id
|
||||
]
|
||||
|
||||
const _sql = `UPDATE "users" SET ${_template} WHERE 'id' = ?`;
|
||||
return resolve(handler.execute(_sql, _values));
|
||||
|
||||
} catch (err: unknown) {
|
||||
reject(err as Error);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getById(handler: MysqlHandler, userId: string): Promise<DbUserData> {
|
||||
/**
|
||||
* Retrieves a user from the database based on their ID.
|
||||
*
|
||||
* @param {MysqlHandler} handler - The MySQL handler object used to execute the query.
|
||||
* @param {string} userId - The ID of the user to retrieve from the database.
|
||||
*
|
||||
* @return {Promise<IDbUser>} - A promise that resolves with the retrieved user object (of type IDbUser).
|
||||
* - Rejects with an error if the ID is invalid or if an error occurs during the database operation.
|
||||
*/
|
||||
getById(handler: MysqlHandler, userId: string): Promise<IDbUser> {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (userId.length !== 36) return reject('Id invalid');
|
||||
const _sql = "SELECT * FROM `users` WHERE `id` = ?";
|
||||
const _values = [userId];
|
||||
try {
|
||||
resolve(handler.execute(_sql, _values) as unknown as DbUserData);
|
||||
resolve(handler.execute(_sql, _values) as unknown as IDbUser);
|
||||
} catch (err: unknown) {
|
||||
reject(err as Error);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getAll(handler: MysqlHandler): Promise<Array<DbUserData>> {
|
||||
/**
|
||||
* Retrieves all users from the database.
|
||||
*
|
||||
* @param {MysqlHandler} handler - The MySQL handler object used to query the database.
|
||||
* @return {Promise<Array<IDbUser>>} - A promise that resolves with an array of user objects from the database.
|
||||
* @throws {Error} - If an error occurs while querying the database.
|
||||
*/
|
||||
getAll(handler: MysqlHandler): Promise<Array<IDbUser>> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const _sql = "SELECT * FROM `users`";
|
||||
try {
|
||||
return resolve(handler.query(_sql) as unknown as Array<DbUserData>);
|
||||
} catch (err: unknown) {
|
||||
return reject();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getByUsername(handler: MysqlHandler, username: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const _sql = "SELECT * FROM `users` WHERE `username` = ?";
|
||||
const _values = [username];
|
||||
try {
|
||||
resolve(handler.execute(_sql, _values));
|
||||
resolve(handler.query(_sql) as unknown as Array<IDbUser>);
|
||||
} catch (err: unknown) {
|
||||
reject(err as Error);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getByEmail(handler: MysqlHandler, email: string) {
|
||||
/**
|
||||
* Retrieves a user from the database by email.
|
||||
*
|
||||
* @param {MysqlHandler} handler - The MySQL database handler instance.
|
||||
* @param {string} email - The email of the user to retrieve.
|
||||
* @return {Promise<IDbUser>} - 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<IDbUser> {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!email) return reject('email is undefined')
|
||||
const _sql = "SELECT * FROM `users` WHERE `email` = ?";
|
||||
const _values = [email];
|
||||
try {
|
||||
resolve(handler.execute(_sql, _values));
|
||||
} catch (err: unknown) {
|
||||
reject(err as Error);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getByDisplayName(handler: MysqlHandler, displayName: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const _sql = "SELECT * FROM `users` WHERE `displayName` = ?";
|
||||
const _values = [displayName];
|
||||
try {
|
||||
resolve(handler.execute(_sql, _values));
|
||||
resolve(handler.execute(_sql, _values) as unknown as IDbUser);
|
||||
} catch (err: unknown) {
|
||||
reject(err as Error);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Retrieves the admin state for a given user ID.
|
||||
*
|
||||
* @param {MysqlHandler} handler - The MySQL handler object used for executing the query.
|
||||
* @param {string} userId - The ID of the user to get the admin state for.
|
||||
* @return {Promise<boolean>} A Promise that resolves to a boolean value indicating whether the user is an admin or not.
|
||||
* @throws {Error} if an error occurs during the execution of the query.
|
||||
*/
|
||||
getAdminStateForId(handler: MysqlHandler, userId: string) : Promise<boolean> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const _sql = "SELECT `isAdmin` FROM `users` WHERE `id` = ?";
|
||||
const _sql = "SELECT `is_admin` FROM `users` WHERE `id` = ?";
|
||||
const _values = [userId];
|
||||
try {
|
||||
const isAdmin = handler.execute(_sql, _values)
|
||||
@ -217,8 +248,16 @@ const MySqlService = {
|
||||
});
|
||||
},
|
||||
|
||||
delete(handler: MysqlHandler, userId: string) {
|
||||
/**
|
||||
* Deletes a user from the database.
|
||||
* @param {MysqlHandler} handler - The MySQL handler object.
|
||||
* @param {string} userId - The ID of the user to delete.
|
||||
* @return {Promise<unknown>} - A Promise that resolves when the deletion is successful, or rejects with an error.
|
||||
*/
|
||||
delete(handler: MysqlHandler, userId: string): Promise<unknown> {
|
||||
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 {
|
||||
@ -228,7 +267,7 @@ const MySqlService = {
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export default MySqlService
|
Loading…
x
Reference in New Issue
Block a user