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("/auth", AuthRouter);
|
||||||
app.use("/catalog", CatalogRouter);
|
app.use("/catalog", CatalogRouter);
|
||||||
app.use("/rent", RentRouter);
|
app.use("/rent", RentRouter);
|
||||||
logger.info("Routers loaded !");
|
logger.info("Routers loaded !\n");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error(err);
|
logger.error(err);
|
||||||
throw null;
|
throw null;
|
||||||
@ -51,7 +51,13 @@ try {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
app.listen(process.env["APP_PORT"]);
|
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) {
|
} catch (error) {
|
||||||
logger.error(`Server failed to start: ${error}`);
|
logger.error(`Server failed to start: ${error}`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
@ -168,6 +168,8 @@ async function deleteBrand(brandId: string): Promise<boolean> {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug("Service loaded.");
|
||||||
|
|
||||||
const BrandService = {
|
const BrandService = {
|
||||||
create: createBrand,
|
create: createBrand,
|
||||||
update: updateBrand,
|
update: updateBrand,
|
||||||
|
@ -127,6 +127,8 @@ async function deleteCategory(id: string): Promise<unknown> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug("Service loaded.");
|
||||||
|
|
||||||
const CategoryService = {
|
const CategoryService = {
|
||||||
create: createCategory,
|
create: createCategory,
|
||||||
delete: deleteCategory,
|
delete: deleteCategory,
|
||||||
|
@ -64,6 +64,8 @@ async function JwtSignService(
|
|||||||
.sign(new TextEncoder().encode(`${process.env["JWT_SECRET"]}`));
|
.sign(new TextEncoder().encode(`${process.env["JWT_SECRET"]}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug("Service loaded.");
|
||||||
|
|
||||||
const JwtService = {
|
const JwtService = {
|
||||||
verify: JwtVerifyService,
|
verify: JwtVerifyService,
|
||||||
sign: JwtSignService,
|
sign: JwtSignService,
|
||||||
|
@ -135,6 +135,8 @@ async function getAllModels(): Promise<IDbModel[] | null> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug("Service loaded.");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ModelService is responsible for managing models.
|
* ModelService is responsible for managing models.
|
||||||
* @namespace
|
* @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> {
|
update(handler: MysqlHandler, data: IDbUser): Promise<IDbStatusResult> {
|
||||||
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");
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
import type {IDbUser} from "@interfaces/database/IDbUser";
|
import type { IDbUser } from "@interfaces/database/IDbUser";
|
||||||
import type {IReqLogin} from "@interfaces/requests/IReqLogin";
|
import type { IReqLogin } from "@interfaces/requests/IReqLogin";
|
||||||
import type {IReqRegister} from "@interfaces/requests/IReqRegister";
|
import type { IReqRegister } from "@interfaces/requests/IReqRegister";
|
||||||
import {ErrorType, type ISError} from "@interfaces/services/ISError";
|
import { ErrorType, type ISError } from "@interfaces/services/ISError";
|
||||||
import CredentialService from "@services/credential.service";
|
import CredentialService from "@services/credential.service";
|
||||||
import JwtService from "@services/jwt.service";
|
import JwtService from "@services/jwt.service";
|
||||||
import MySqlService from "@services/mysql.service";
|
import MySqlService from "@services/mysql.service";
|
||||||
import MysqlService from "@services/mysql.service";
|
import MysqlService from "@services/mysql.service";
|
||||||
import {Logger} from "tslog";
|
import { Logger } from "tslog";
|
||||||
import {v4} from "uuid";
|
import { v4 } from "uuid";
|
||||||
|
|
||||||
|
|
||||||
const logger = new Logger({
|
const logger = new Logger({
|
||||||
name: "UserService",
|
name: "UserService",
|
||||||
@ -77,17 +76,18 @@ async function getUserFromIdService(id: string): Promise<IDbUser | ISError> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function register(ReqData: IReqRegister): Promise<ISError | string> {
|
async function register(inputData: IReqRegister): Promise<ISError | string> {
|
||||||
if (ReqData.password.length < 6) {
|
if (inputData.password.length < 6) {
|
||||||
return {
|
return {
|
||||||
error: ErrorType.InvalidData,
|
error: ErrorType.InvalidData,
|
||||||
message: "Password must be at least 6 characters long.",
|
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 ?
|
// Does the new user has accepted GDPR ?
|
||||||
if (ReqData.gdpr !== true) {
|
if (inputData.gdpr !== true) {
|
||||||
return {
|
return {
|
||||||
error: ErrorType.InvalidData,
|
error: ErrorType.InvalidData,
|
||||||
message: "GDPR acceptance is required.",
|
message: "GDPR acceptance is required.",
|
||||||
@ -96,32 +96,44 @@ async function register(ReqData: IReqRegister): Promise<ISError | string> {
|
|||||||
const currentDate = new Date();
|
const currentDate = new Date();
|
||||||
|
|
||||||
// Check if exist and return
|
// 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) {
|
if ("error" in dbUserIfExist) {
|
||||||
return {
|
return {
|
||||||
error: dbUserIfExist.error,
|
error: dbUserIfExist.error,
|
||||||
message: dbUserIfExist.message,
|
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, {
|
const NewUser = await MySqlService.User.insert(DbHandler, {
|
||||||
id: v4(),
|
id: currentId,
|
||||||
email: ReqData.email,
|
email: inputData.email,
|
||||||
username: ReqData.username,
|
username: inputData.username,
|
||||||
firstname: ReqData.firstName,
|
firstname: inputData.firstName,
|
||||||
lastname: ReqData.lastName,
|
lastname: inputData.lastName,
|
||||||
dob: ReqData.dob,
|
dob: inputData.dob,
|
||||||
hash: passwordHash,
|
hash: passwordHash,
|
||||||
gdpr: currentDate,
|
gdpr: currentDate,
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
is_mail_verified: false,
|
is_mail_verified: false,
|
||||||
});
|
});
|
||||||
if ("error" in NewUser || !NewUser.id) {
|
if ("error" in NewUser || NewUser.affectedRows === 0) {
|
||||||
return {
|
return {
|
||||||
error: ErrorType.DatabaseError,
|
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
|
// JWT
|
||||||
const token = await JwtService.sign(
|
const token = await JwtService.sign(
|
||||||
@ -273,6 +285,7 @@ async function deleteUserService(targetId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug("Service loaded.");
|
||||||
const UserService = {
|
const UserService = {
|
||||||
register: register,
|
register: register,
|
||||||
login: login,
|
login: login,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user