diff --git a/src/app.ts b/src/app.ts index cfd298d..23ba37b 100644 --- a/src/app.ts +++ b/src/app.ts @@ -43,7 +43,7 @@ try { app.use("/auth", AuthRouter); app.use("/catalog", CatalogRouter); app.use("/rent", RentRouter); - logger.info("Routers loaded !"); + logger.info("Routers loaded !\n"); } catch (err) { logger.error(err); throw null; @@ -51,7 +51,13 @@ try { try { app.listen(process.env["APP_PORT"]); - logger.info("Server is running !"); + logger.info( + `Server is running !\n >> Memory total: ${ + process.memoryUsage().rss / 1_000_000 + } Mio\n >> Memory heap usage: ${ + process.memoryUsage().heapUsed / 1_000_000 + } Mio\n\n`, + ); } catch (error) { logger.error(`Server failed to start: ${error}`); process.exit(1); diff --git a/src/services/brand.service.ts b/src/services/brand.service.ts index e3f1a7d..713bc07 100644 --- a/src/services/brand.service.ts +++ b/src/services/brand.service.ts @@ -168,6 +168,8 @@ async function deleteBrand(brandId: string): Promise { return true; } +logger.debug("Service loaded."); + const BrandService = { create: createBrand, update: updateBrand, diff --git a/src/services/category.service.ts b/src/services/category.service.ts index a80029c..be150a8 100644 --- a/src/services/category.service.ts +++ b/src/services/category.service.ts @@ -127,6 +127,8 @@ async function deleteCategory(id: string): Promise { } } +logger.debug("Service loaded."); + const CategoryService = { create: createCategory, delete: deleteCategory, diff --git a/src/services/jwt.service.ts b/src/services/jwt.service.ts index a7db961..8ea7a08 100644 --- a/src/services/jwt.service.ts +++ b/src/services/jwt.service.ts @@ -64,6 +64,8 @@ async function JwtSignService( .sign(new TextEncoder().encode(`${process.env["JWT_SECRET"]}`)); } +logger.debug("Service loaded."); + const JwtService = { verify: JwtVerifyService, sign: JwtSignService, diff --git a/src/services/model.service.ts b/src/services/model.service.ts index bee21cb..7d0d897 100644 --- a/src/services/model.service.ts +++ b/src/services/model.service.ts @@ -135,6 +135,8 @@ async function getAllModels(): Promise { } } +logger.debug("Service loaded."); + /** * ModelService is responsible for managing models. * @namespace diff --git a/src/services/mysql.service.ts b/src/services/mysql.service.ts index 0c578d3..9dede93 100644 --- a/src/services/mysql.service.ts +++ b/src/services/mysql.service.ts @@ -135,6 +135,13 @@ const MySqlService = { }); }, + /** + * Updates a user in the database. + * @param {MysqlHandler} handler - The MySQL handler object. + * @param {IDbUser} data - The updated user data. + * @returns {Promise} - A promise that resolves to the result of the update operation. + * @throws {Error} If an error occurs during the update operation. + */ update(handler: MysqlHandler, data: IDbUser): Promise { return new Promise((resolve, reject) => { if (!data.id) return reject("Id is undefined"); diff --git a/src/services/user.service.ts b/src/services/user.service.ts index a885123..7065e30 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -1,14 +1,13 @@ -import type {IDbUser} from "@interfaces/database/IDbUser"; -import type {IReqLogin} from "@interfaces/requests/IReqLogin"; -import type {IReqRegister} from "@interfaces/requests/IReqRegister"; -import {ErrorType, type ISError} from "@interfaces/services/ISError"; +import type { IDbUser } from "@interfaces/database/IDbUser"; +import type { IReqLogin } from "@interfaces/requests/IReqLogin"; +import type { IReqRegister } from "@interfaces/requests/IReqRegister"; +import { ErrorType, type ISError } from "@interfaces/services/ISError"; import CredentialService from "@services/credential.service"; import JwtService from "@services/jwt.service"; import MySqlService from "@services/mysql.service"; import MysqlService from "@services/mysql.service"; -import {Logger} from "tslog"; -import {v4} from "uuid"; - +import { Logger } from "tslog"; +import { v4 } from "uuid"; const logger = new Logger({ name: "UserService", @@ -77,17 +76,18 @@ async function getUserFromIdService(id: string): Promise { } } -async function register(ReqData: IReqRegister): Promise { - if (ReqData.password.length < 6) { +async function register(inputData: IReqRegister): Promise { + if (inputData.password.length < 6) { return { error: ErrorType.InvalidData, message: "Password must be at least 6 characters long.", }; } - const passwordHash = await CredentialService.hash(`${ReqData.password}`); + //TODO check Object content keys + const passwordHash = await CredentialService.hash(`${inputData.password}`); // Does the new user has accepted GDPR ? - if (ReqData.gdpr !== true) { + if (inputData.gdpr !== true) { return { error: ErrorType.InvalidData, message: "GDPR acceptance is required.", @@ -96,32 +96,44 @@ async function register(ReqData: IReqRegister): Promise { const currentDate = new Date(); // Check if exist and return - const dbUserIfExist: IDbUser | ISError = await getUserByEmail(ReqData.email); + const dbUserIfExist: IDbUser | ISError = await getUserByEmail( + inputData.email, + ); if ("error" in dbUserIfExist) { return { error: dbUserIfExist.error, message: dbUserIfExist.message, }; } - + if (dbUserIfExist.id) { + logger.info( + `User already exist for email "${inputData.email}".\n(${dbUserIfExist.username}::${dbUserIfExist.id})\n`, + ); + return { + error: ErrorType.UnAuthorized, + message: "User already exists.", + }; + } + const currentId = v4(); const NewUser = await MySqlService.User.insert(DbHandler, { - id: v4(), - email: ReqData.email, - username: ReqData.username, - firstname: ReqData.firstName, - lastname: ReqData.lastName, - dob: ReqData.dob, + id: currentId, + email: inputData.email, + username: inputData.username, + firstname: inputData.firstName, + lastname: inputData.lastName, + dob: inputData.dob, hash: passwordHash, gdpr: currentDate, is_admin: false, is_mail_verified: false, }); - if ("error" in NewUser || !NewUser.id) { - return { - error: ErrorType.DatabaseError, - message: 'Error when inserting user in database.' - }; - } + if ("error" in NewUser || NewUser.affectedRows === 0) { + return { + error: ErrorType.DatabaseError, + message: "Error when inserting user in database.", + }; + } + logger.info(`New user created ! (${inputData.username}::${currentId})`); // JWT const token = await JwtService.sign( @@ -273,6 +285,7 @@ async function deleteUserService(targetId) { } } +logger.debug("Service loaded."); const UserService = { register: register, login: login,