feat(services): enhance user service functions

- Modified the logic in `getUserByEmail` to handle multiple user instances.
- Altered the dob field to save as current date in inserted user records.
- Richened `getByEmailService` function to check email existence in the database.
- Adjusted `is_mail_verified` flag to `is_email_verified` within user insertion function.

Issue: #18
Signed-off-by: Mathis <yidhra@tuta.io>
This commit is contained in:
Mathis H (Avnyr) 2024-05-02 12:21:37 +02:00
parent d78b0aec4c
commit 3b6726113d
Signed by: Mathis
GPG Key ID: DD9E0666A747D126

View File

@ -26,14 +26,18 @@ const DbHandler = new MySqlService.Handler("UserService");
async function getUserByEmail(targetEmail: string): Promise<IDbUser | ISError> { async function getUserByEmail(targetEmail: string): Promise<IDbUser | ISError> {
try { try {
const dbUser = await MySqlService.User.getByEmail(DbHandler, targetEmail); const dbUser = await MySqlService.User.getByEmail(DbHandler, targetEmail);
if (dbUser === undefined) { if (dbUser.length === 0) {
logger.info(`\n\n> User not found (${targetEmail})\n`); logger.info(`\n\n> User not found (${targetEmail})\n`);
return { return {
error: ErrorType.NotFound, error: ErrorType.NotFound,
message: "The user was not fund.", message: "The user was not fund.",
}; };
} }
return dbUser; if (dbUser.length === 1 && dbUser[0]) return dbUser[0];
return {
error: ErrorType.ServiceError,
message: "To many user found, suspicious.",
};
} catch (err) { } catch (err) {
logger.error(err); logger.error(err);
return { return {
@ -135,17 +139,18 @@ async function register(inputData: IReqRegister): Promise<ISError | string> {
}; };
} }
const currentId = v4(); const currentId = v4();
logger.info(`\n\n> Trying to insert a new user... (${currentId})\n`);
const NewUser = await MySqlService.User.insert(DbHandler, { const NewUser = await MySqlService.User.insert(DbHandler, {
id: currentId, id: currentId,
email: inputData.email, email: inputData.email,
username: inputData.username, username: inputData.username,
firstname: inputData.firstName, firstname: inputData.firstName,
lastname: inputData.lastName, lastname: inputData.lastName,
dob: inputData.dob, dob: new Date(),
hash: passwordHash, hash: passwordHash,
gdpr: currentDate, gdpr: currentDate,
is_admin: false, is_admin: false,
is_mail_verified: false, is_email_verified: false,
}); });
if ("error" in NewUser || NewUser.affectedRows === 0) { if ("error" in NewUser || NewUser.affectedRows === 0) {
return { return {
@ -240,6 +245,16 @@ async function login(inputData: IReqLogin): Promise<ISError | string> {
} }
} }
async function getByEmailService(email: string): Promise<IDbUser | false> {
const dbUser = await MySqlService.User.getByEmail(DbHandler, email);
if (dbUser === undefined) {
logger.trace(`\n\n> User not found in DB (${email})\n`);
return false;
}
logger.trace(dbUser);
return dbUser;
}
//TOTest //TOTest
/** /**
* Retrieves all users from the database. * Retrieves all users from the database.
@ -318,6 +333,7 @@ const UserService = {
login: login, login: login,
getAll: getAllUsersService, getAll: getAllUsersService,
getFromId: getUserFromIdService, getFromId: getUserFromIdService,
getByEmail: getByEmailService,
edit: editUserService, edit: editUserService,
delete: deleteUserService, delete: deleteUserService,
}; };