feat(services): add memory usage info, update user, enhance log and register function
- Added log for loaded services - Implemented feature to update user in MySQL service - Added memory usage information in the server start log - Enhanced registration function in user service to provide more detailed response and log information - Minor code formatting improvements Issue: #18 Signed-off-by: Mathis <yidhra@tuta.io>
This commit is contained in:
parent
3232e5fac1
commit
0635c512cc
10
src/app.ts
10
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);
|
||||
|
@ -168,6 +168,8 @@ async function deleteBrand(brandId: string): Promise<boolean> {
|
||||
return true;
|
||||
}
|
||||
|
||||
logger.debug("Service loaded.");
|
||||
|
||||
const BrandService = {
|
||||
create: createBrand,
|
||||
update: updateBrand,
|
||||
|
@ -127,6 +127,8 @@ async function deleteCategory(id: string): Promise<unknown> {
|
||||
}
|
||||
}
|
||||
|
||||
logger.debug("Service loaded.");
|
||||
|
||||
const CategoryService = {
|
||||
create: createCategory,
|
||||
delete: deleteCategory,
|
||||
|
@ -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,
|
||||
|
@ -135,6 +135,8 @@ async function getAllModels(): Promise<IDbModel[] | null> {
|
||||
}
|
||||
}
|
||||
|
||||
logger.debug("Service loaded.");
|
||||
|
||||
/**
|
||||
* ModelService is responsible for managing models.
|
||||
* @namespace
|
||||
|
@ -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<IDbStatusResult>} - 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<IDbStatusResult> {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!data.id) return reject("Id is undefined");
|
||||
|
@ -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<IDbUser | ISError> {
|
||||
}
|
||||
}
|
||||
|
||||
async function register(ReqData: IReqRegister): Promise<ISError | string> {
|
||||
if (ReqData.password.length < 6) {
|
||||
async function register(inputData: IReqRegister): Promise<ISError | string> {
|
||||
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<ISError | string> {
|
||||
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) {
|
||||
if ("error" in NewUser || NewUser.affectedRows === 0) {
|
||||
return {
|
||||
error: ErrorType.DatabaseError,
|
||||
message: 'Error when inserting user in database.'
|
||||
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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user