feat(app): update debug syntax, refactor HTTP status codes

- Updated import and usage of `isDebugMode` function across multiple controllers and services for better readability
- Improved the use of HTTP status codes in `auth.controller.ts` for more accurate responses
- Refactored HTTP status codes `HttpStatusCode` enum to include detailed comments

Signed-off-by: Mathis <yidhra@tuta.io>
This commit is contained in:
Mathis H (Avnyr) 2024-05-02 15:29:19 +02:00
parent 8644b5add6
commit 1cbc771251
Signed by: Mathis
GPG Key ID: DD9E0666A747D126
12 changed files with 287 additions and 67 deletions

View File

@ -52,11 +52,11 @@ try {
try { try {
app.listen(process.env["APP_PORT"]); app.listen(process.env["APP_PORT"]);
logger.info( logger.info(
`Server is running !\n >> Memory total: ${ `Server is running !\n >> Memory total: ${Math.round(
Math.round(process.memoryUsage().rss / 1_000_000) process.memoryUsage().rss / 1_000_000,
} Mio\n >> Memory heap: ${ )} Mio\n >> Memory heap: ${Math.round(
Math.round(process.memoryUsage().heapUsed / 1_000_000) process.memoryUsage().heapUsed / 1_000_000,
} Mio\n`, )} Mio\n`,
); );
} catch (error) { } catch (error) {
logger.error(`Server failed to start: ${error}`); logger.error(`Server failed to start: ${error}`);

View File

@ -1,22 +1,31 @@
import JwtService from "@services/jwt.service"; import JwtService from "@services/jwt.service";
import type { IReqEditUserData } from "@interfaces/IReqEditUserData"; import type { IReqEditUserData } from "@interfaces/IReqEditUserData";
import { HttpStatusCode } from "@interfaces/requests/HttpStatusCode";
import type { IReqRegister } from "@interfaces/requests/IReqRegister"; import type { IReqRegister } from "@interfaces/requests/IReqRegister";
import UserService from "@services/user.service"; import UserService from "@services/user.service";
import { isDebugMode } from "@utils/debugState";
import { isEmail } from "@utils/validators/email"; import { isEmail } from "@utils/validators/email";
import type { Request, Response } from "express"; import type { Request, Response } from "express";
import { Logger } from "tslog"; import { Logger } from "tslog";
import {isDebugMode} from "@utils/debugState";
const logger = new Logger({ const logger = new Logger({
name: "AuthController", name: "AuthController",
}); });
async function registerUser(req: Request, res: Response): Promise<unknown> { /**
* Registers a user.
*
* @param {Request} req - The request object.
* @param {Response} res - The response object.
*
* @return {Promise} - A promise that resolves with the registration result or rejects with an error.
*/
async function registerUser(req: Request, res: Response): Promise<Response> {
const body: IReqRegister = req.body; const body: IReqRegister = req.body;
if (!body) { if (!body) {
logger.warn(`Invalid input data (${req.ip})`); logger.warn(`Invalid input data (${req.ip})`);
return res.type("application/json").status(400).json({ return res.type("application/json").status(HttpStatusCode.BadRequest).json({
error: "Invalid input data", error: "Invalid input data",
}); });
} }
@ -28,14 +37,14 @@ async function registerUser(req: Request, res: Response): Promise<unknown> {
!body.email !body.email
) { ) {
logger.warn(`Field(s) missing (${req.ip})`); logger.warn(`Field(s) missing (${req.ip})`);
return res.type("application/json").status(400).json({ return res.type("application/json").status(HttpStatusCode.BadRequest).json({
error: "Field(s) missing", error: "Field(s) missing",
}); });
} }
if (!isEmail(body.email)) { if (!isEmail(body.email)) {
logger.warn(`Invalid email format (${req.ip})`); logger.warn(`Invalid email format (${req.ip})`);
return res.type("application/json").status(400).json({ return res.type("application/json").status(HttpStatusCode.BadRequest).json({
error: "Invalid email format", error: "Invalid email format",
}); });
} }
@ -55,16 +64,19 @@ async function registerUser(req: Request, res: Response): Promise<unknown> {
const RegisterServiceResult = await UserService.register(sanitizeData); const RegisterServiceResult = await UserService.register(sanitizeData);
if (RegisterServiceResult.error === "gdprNotApproved") { if (typeof RegisterServiceResult !== 'string' && RegisterServiceResult.message === "GDPR acceptance is required.") {
logger.warn(`GDPR not approved (${req.ip})`); logger.warn(`GDPR not approved (${req.ip})`);
return res.status(400).json({ return res.status(HttpStatusCode.BadRequest).json({
error: RegisterServiceResult.error, error: RegisterServiceResult.error,
message: "GDPR not accepted.", message: "GDPR not accepted.",
}); });
} }
if (typeof RegisterServiceResult !== 'string' && RegisterServiceResult.error === 5) { if (
typeof RegisterServiceResult !== "string" &&
RegisterServiceResult.error === 5
) {
logger.warn(`The user already exists (${sanitizeData.email})`); logger.warn(`The user already exists (${sanitizeData.email})`);
return res.type("application/json").status(400).json({ return res.type("application/json").status(HttpStatusCode.Conflict).json({
error: RegisterServiceResult.error, error: RegisterServiceResult.error,
message: "The user already exists.", message: "The user already exists.",
}); });
@ -72,7 +84,10 @@ async function registerUser(req: Request, res: Response): Promise<unknown> {
// SUCCESS // SUCCESS
//logger.info(`User registered successfully (${sanitizeData.username})`); //logger.info(`User registered successfully (${sanitizeData.username})`);
return res.type("application/json").status(201).json({token:RegisterServiceResult}); return res
.type("application/json")
.status(HttpStatusCode.Ok)
.json({ token: RegisterServiceResult });
} }
/** /**
@ -86,19 +101,19 @@ async function registerUser(req: Request, res: Response): Promise<unknown> {
async function loginUser(req: Request, res: Response): Promise<void> { async function loginUser(req: Request, res: Response): Promise<void> {
const body = req.body; const body = req.body;
if (!body) { if (!body) {
res.type("application/json").status(400).json({ res.type("application/json").status(HttpStatusCode.BadRequest).json({
error: "Invalid input data", error: "Invalid input data",
}); });
} }
if (!body.password || !body.username) { if (!body.password || !body.email) {
logger.warn(`Field(s) missing (${req.ip})`); logger.warn(`Field(s) missing (${req.ip})`);
res.type("application/json").status(400).json({ res.type("application/json").status(HttpStatusCode.BadRequest).json({
error: "Field(s) missing", error: "Field(s) missing",
}); });
} }
const loginData = { const loginData = {
username: `${body.username}`, email: `${body.email}`,
password: `${body.password}`, password: `${body.password}`,
}; };
console.log(body); console.log(body);
@ -107,13 +122,13 @@ async function loginUser(req: Request, res: Response): Promise<void> {
if (LoginServiceResult.error === "userNotFound") { if (LoginServiceResult.error === "userNotFound") {
console.log("POOL"); console.log("POOL");
res.type("application/json").status(404).json({ res.type("application/json").status(HttpStatusCode.NotFound).json({
error: LoginServiceResult.error, error: LoginServiceResult.error,
message: "User not found.", message: "User not found.",
}); });
} }
if (LoginServiceResult.error === "invalidPassword") { if (LoginServiceResult.error === "invalidPassword") {
res.type("application/json").status(401).json({ res.type("application/json").status(HttpStatusCode.NotAcceptable).json({
error: LoginServiceResult.error, error: LoginServiceResult.error,
message: "Invalid password.", message: "Invalid password.",
}); });
@ -126,35 +141,35 @@ async function getAllUsers(req: Request, res: Response) {
const bearerToken = authHeader?.split(" ")[1]; const bearerToken = authHeader?.split(" ")[1];
if (!bearerToken) { if (!bearerToken) {
logger.warn(`Bearer token not provided (${req.ip})`); logger.warn(`Bearer token not provided (${req.ip})`);
return res.type("application/json").status(401).json({ return res.type("application/json").status(HttpStatusCode.Forbidden).json({
error: "Unauthorized", error: "Invalid token",
}); });
} }
const payload = await JwtService.verify(bearerToken); const payload = await JwtService.verify(bearerToken);
if (!payload) { if (!payload || !payload.sub) {
logger.warn(`Unauthorized access attempt (${req.ip})`); logger.warn(`Unauthorized access attempt (${req.ip})`);
return res.type("application/json").status(401).json({ return res.type("application/json").status(HttpStatusCode.Forbidden).json({
error: "Unauthorized", error: "Invalid token",
}); });
} }
const sourceUser = await UserService.getFromId(payload.sub); const sourceUser = await UserService.getFromId(payload.sub);
if (!sourceUser) { if (!sourceUser) {
return res.type("application/json").status(404).json({ return res.type("application/json").status(HttpStatusCode.ImATeapot).json({
error: "You dont exist anymore", error: "You dont exist anymore",
}); });
} }
if (!sourceUser.is_admin) { if (!sourceUser.is_admin) {
return res.type("application/json").status(403).json({ return res.type("application/json").status(HttpStatusCode.Forbidden).json({
error: "Unauthorized", error: "Unauthorized",
}); });
} }
const AllUserResponse = await UserService.getAll(); const AllUserResponse = await UserService.getAll();
if (!AllUserResponse.users) { if (!AllUserResponse.users) {
return res.type("application/json").status(500).json({ return res.type("application/json").status(HttpStatusCode.InternalServerError).json({
error: "Internal server error", error: "Internal server error",
}); });
} }
return res.type("application/json").status(200).json(AllUserResponse); return res.type("application/json").status(HttpStatusCode.Found).json(AllUserResponse);
} }
async function getUser(req: Request, res: Response) { async function getUser(req: Request, res: Response) {
@ -162,25 +177,25 @@ async function getUser(req: Request, res: Response) {
const bearerToken = authHeader?.split(" ")[1]; const bearerToken = authHeader?.split(" ")[1];
if (!bearerToken) { if (!bearerToken) {
logger.warn(`Bearer token not provided (${req.ip})`); logger.warn(`Bearer token not provided (${req.ip})`);
return res.type("application/json").status(401).json({ return res.type("application/json").status(HttpStatusCode.Unauthorized).json({
error: "Unauthorized", error: "Unauthorized",
}); });
} }
const payload = await JwtService.verify(bearerToken); const payload = await JwtService.verify(bearerToken);
if (!payload) { if (!payload || !payload.sub) {
logger.warn(`Unauthorized access attempt (${req.ip})`); logger.warn(`Unauthorized access attempt (${req.ip})`);
return res.type("application/json").status(401).json({ return res.type("application/json").status(HttpStatusCode.Unauthorized).json({
error: "Unauthorized", error: "Unauthorized",
}); });
} }
const sourceUser = await UserService.getFromId(payload.sub); const sourceUser = await UserService.getFromId(payload.sub);
if (!sourceUser) { if (!sourceUser) {
return res.type("application/json").status(404).json({ return res.type("application/json").status(HttpStatusCode.ImATeapot).json({
error: "You dont exist anymore", error: "You dont exist anymore",
}); });
} }
if (!sourceUser.is_admin) { if ("username" in sourceUser && !sourceUser.is_admin) {
return res.type("application/json").status(403).json({ return res.type("application/json").status(HttpStatusCode.Unauthorized).json({
error: "Unauthorized", error: "Unauthorized",
}); });
} }
@ -188,7 +203,7 @@ async function getUser(req: Request, res: Response) {
const dbUser = await UserService.getFromId(userId); const dbUser = await UserService.getFromId(userId);
if (!dbUser) { if (!dbUser) {
logger.warn(`User not found (${req.ip})`); logger.warn(`User not found (${req.ip})`);
return res.type("application/json").status(404).json({ return res.type("application/json").status(HttpStatusCode.NotFound).json({
error: "User not found", error: "User not found",
}); });
} }
@ -196,7 +211,7 @@ async function getUser(req: Request, res: Response) {
delete dbUser.passwordHash; delete dbUser.passwordHash;
// @ts-ignore // @ts-ignore
delete dbUser._id; delete dbUser._id;
return res.type("application/json").status(200).json(dbUser); return res.type("application/json").status(HttpStatusCode.Found).json(dbUser);
} }
//FEAT - Implement re-auth by current password in case of password change //FEAT - Implement re-auth by current password in case of password change
@ -216,7 +231,7 @@ async function editUser(req: Request, res: Response) {
}); });
} }
const payload = await JwtService.verify(bearerToken); const payload = await JwtService.verify(bearerToken);
if (!payload) { if (!payload || !payload.sub) {
logger.warn(`Unauthorized access attempt (${req.ip})`); logger.warn(`Unauthorized access attempt (${req.ip})`);
return res.type("application/json").status(401).json({ return res.type("application/json").status(401).json({
error: "Unauthorized", error: "Unauthorized",
@ -373,24 +388,24 @@ async function getSelf(req: Request, res: Response) {
}); });
} }
const payload = await JwtService.verify(bearerToken); const payload = await JwtService.verify(bearerToken);
if (!payload) { if (!payload || !payload.sub) {
logger.warn(`Unauthorized access attempt (${req.ip})`); logger.warn(`Unauthorized access attempt (${req.ip})`);
return res.type("application/json").status(401).json({ return res.type("application/json").status(401).json({
error: "Unauthorized", error: "Unauthorized",
}); });
} }
const dbUser = await UserService.getFromId(payload.sub); const GetUserResult = await UserService.getFromId(payload.sub);
if (!dbUser) { if (!GetUserResult) {
return res.type("application/json").status(404).json({ return res.type("application/json").status(404).json({
error: "User not found", error: "User not found",
}); });
} }
return res.type("application/json").status(200).json({ return res.type("application/json").status(200).json({
id: dbUser.id, id: GetUserResult.id,
username: dbUser.username, username: GetUserResult.username,
firstName: dbUser.firstname, firstName: GetUserResult.firstname,
lastName: dbUser.firstname, lastName: GetUserResult.firstname,
isAdmin: dbUser.firstname, isAdmin: GetUserResult.firstname,
}); });
} }

View File

@ -3,7 +3,7 @@ import { Logger } from "tslog";
import type IDbBrand from "@interfaces/database/IDbBrand"; import type IDbBrand from "@interfaces/database/IDbBrand";
import BrandService from "@services/brand.service"; import BrandService from "@services/brand.service";
import {isDebugMode} from "@utils/debugState"; import { isDebugMode } from "@utils/debugState";
//import {body} from "express-validator"; //import {body} from "express-validator";
const logger = new Logger({ const logger = new Logger({

View File

@ -1,8 +1,8 @@
import type IDbCategory from "@interfaces/database/IDbCategory"; import type IDbCategory from "@interfaces/database/IDbCategory";
import CategoryService from "@services/category.service"; import CategoryService from "@services/category.service";
import { isDebugMode } from "@utils/debugState";
import type { Request, Response } from "express"; import type { Request, Response } from "express";
import { Logger } from "tslog"; import { Logger } from "tslog";
import {isDebugMode} from "@utils/debugState";
//import {validationResult} from "express-validator"; //import {validationResult} from "express-validator";
const logger = new Logger({ const logger = new Logger({

View File

@ -1,9 +1,9 @@
import type IDbModel from "@interfaces/database/IDbModel"; import type IDbModel from "@interfaces/database/IDbModel";
import CategoryService from "@services/category.service"; import CategoryService from "@services/category.service";
import ModelService from "@services/model.service"; import ModelService from "@services/model.service";
import { isDebugMode } from "@utils/debugState";
import type { Request, Response } from "express"; import type { Request, Response } from "express";
import { Logger } from "tslog"; import { Logger } from "tslog";
import {isDebugMode} from "@utils/debugState";
//import {validationResult} from "express-validator"; //import {validationResult} from "express-validator";
const logger = new Logger({ const logger = new Logger({

View File

@ -1,57 +1,258 @@
export enum HttpStatusCode { export enum HttpStatusCode {
/**
* Status code for a request indicating that the server received the request headers
* and the client should proceed to send the request body.
* @enum {number}
*/
Continue = 100, Continue = 100,
/**
* Status code for a request indicating that the requester has asked the server to switch protocols.
* @enum {number}
*/
SwitchingProtocols = 101, SwitchingProtocols = 101,
/**
* Status code for a request indicating that the server has received and is processing the request,
* but no response is available yet.
* @enum {number}
*/
Processing = 102, Processing = 102,
/**
* Successful HTTP response
* @enum {number}
*/
Ok = 200, Ok = 200,
/**
* Request has been fulfilled; new resource created as a result.
* @enum {number}
*/
Created = 201, Created = 201,
/**
* Request accepted, but not yet processed.
* @enum {number}
*/
Accepted = 202, Accepted = 202,
/**
* Request successful. Meta-information returned is from original server, not local.
* @enum {number}
*/
NonAuthoritativeInformation = 203, NonAuthoritativeInformation = 203,
/**
* Request processed. No content returned.
* @enum {number}
*/
NoContent = 204, NoContent = 204,
/**
* Server specifies part of document should be reset.
* @enum {number}
*/
ResetContent = 205, ResetContent = 205,
/**
* Partial content returned due to GET.
* @enum {number}
*/
PartialContent = 206, PartialContent = 206,
/**
* Multiple Resource Meta-Data: Could be used for collection instances.
* @enum {number}
*/
MultiStatus = 207, MultiStatus = 207,
/**
* Status code used to indicate that a certain request has been already reported.
* @enum {number}
*/
AlreadyReported = 208, AlreadyReported = 208,
/**
* The server has fulfilled the request for the content, and the content is being conveyed in a manner described by the Content-Encoding, Content-Range, and Content-Type headers.
* @enum {number}
*/
ImUsed = 226, ImUsed = 226,
/**
* @enum {number}
* @description HTTP status code for multiple choices
*/
MultipleChoices = 300, MultipleChoices = 300,
/**
* @enum {number}
* @description HTTP status code for moved permanently
*/
MovedPermanently = 301, MovedPermanently = 301,
/**
* @enum {number}
* @description HTTP status code for found
*/
Found = 302, Found = 302,
/**
* @enum {number}
* @description HTTP status code for see other
*/
SeeOther = 303, SeeOther = 303,
/**
* @enum {number}
* @description HTTP status code for not modified
*/
NotModified = 304, NotModified = 304,
/**
* @enum {number}
* @description HTTP status code for use proxy
*/
UseProxy = 305, UseProxy = 305,
/**
* @enum {number}
* @description HTTP status code for temporary redirect
*/
TemporaryRedirect = 307, TemporaryRedirect = 307,
/**
* @enum {number}
* @description HTTP status code for permanent redirect
*/
PermanentRedirect = 308, PermanentRedirect = 308,
/** @description Client error: The server could not understand the request due to invalid syntax. */
BadRequest = 400, BadRequest = 400,
/** @description Client error: The client must authenticate itself to get the requested response. */
Unauthorized = 401, Unauthorized = 401,
/** @description Client error: This response code is reserved for future use. */
PaymentRequired = 402, PaymentRequired = 402,
/** @description Client error: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. */
Forbidden = 403, Forbidden = 403,
/** @description Client error: The server cannot find requested resource. */
NotFound = 404, NotFound = 404,
/** @description Client error: The request method is not supported by the server and cannot be handled. */
MethodNotAllowed = 405, MethodNotAllowed = 405,
/** @description Client error: This response is sent when the web server, after performing server-driven content negotiation, doesn't find any content following the criteria given by the user agent. */
NotAcceptable = 406, NotAcceptable = 406,
/** @description Client error: This is similar to 401 (Unauthorised), but indicates that the client must authenticate itself to get the requested response. */
ProxyAuthenticationRequired = 407, ProxyAuthenticationRequired = 407,
/** @description Client error: This response is sent on an idle connection by some servers, even without any previous request by the client. */
RequestTimeout = 408, RequestTimeout = 408,
/** @description Client error: This response is sent when a request conflicts with the current state of the server. */
Conflict = 409, Conflict = 409,
/** @description Client error: This response is sent when the requested content has been permanently deleted from server, with no forwarding address. */
Gone = 410, Gone = 410,
/** @description Client error: The server refuses to accept the request without a defined Content- Length. */
LengthRequired = 411, LengthRequired = 411,
/** @description Client error: The precondition given in the request evaluated to false by the server. */
PreconditionFailed = 412, PreconditionFailed = 412,
/** @description Client error: Request entity is larger than limits defined by server. */
PayloadTooLarge = 413, PayloadTooLarge = 413,
/** @description Client error: The URI requested by the client is longer than the server is willing to interpret. */
UriTooLong = 414, UriTooLong = 414,
/** @description Client error: The media format of the requested data is not supported by the server, so the server is rejecting the request. */
UnsupportedMediaType = 415, UnsupportedMediaType = 415,
/** @description Client error: The range specified by the Range header field in the request can't be fulfilled. */
RangeNotSatisfiable = 416, RangeNotSatisfiable = 416,
/** @description Client error: This response code means the expectation indicated by the Expect request header field can't be met by the server. */
ExpectationFailed = 417, ExpectationFailed = 417,
/** @description Client error: The server refuses to brew coffee because it is, permanently, a teapot. */
ImATeapot = 418, ImATeapot = 418,
/**
* @enum
* @name MisdirectedRequest
* @description Represents HTTP status code 421: Misdirected Request.
* The client should switch to a different protocol such as TLS/1.0.
*/
MisdirectedRequest = 421, MisdirectedRequest = 421,
/**
* @enum
* @name UnprocessableEntity
* @description Represents HTTP status code 422: Unprocessable Entity.
* The request was well-formed but was unable to be followed due to semantic errors.
*/
UnprocessableEntity = 422, UnprocessableEntity = 422,
/**
* @enum
* @name Locked
* @description Represents HTTP status code 423: Locked.
* The resource that is being accessed is locked.
*/
Locked = 423, Locked = 423,
/**
* @enum
* @name FailedDependency
* @description Represents HTTP status code 424: Failed Dependency.
* The request failed because it depended on another request and that request failed.
*/
FailedDependency = 424, FailedDependency = 424,
/**
* @enum
* @name TooEarly
* @description Represents HTTP status code 425: Too Early.
* Indicates that the server is unwilling to risk processing a request that might be replayed.
*/
TooEarly = 425, TooEarly = 425,
/**
* @enum
* @name UpgradeRequired
* @description Represents HTTP status code 426: Upgrade Required.
* The client should switch to a different protocol.
*/
UpgradeRequired = 426, UpgradeRequired = 426,
/**
* @enum
* @name PreconditionRequired
* @description Represents HTTP status code 428: Precondition Required.
* The client must first fulfill certain precondition.
*/
PreconditionRequired = 428, PreconditionRequired = 428,
/**
* @enum
* @name TooManyRequests
* @description Represents HTTP status code 429: Too Many Requests.
* The user has sent too many requests in a certain amount of time.
*/
TooManyRequests = 429, TooManyRequests = 429,
/**
* @enum
* @name RequestHeaderFieldsTooLarge
* @description Represents HTTP status code 431: Request Header Fields Too Large.
* The server is unwilling to process the request because its header fields are too large.
*/
RequestHeaderFieldsTooLarge = 431, RequestHeaderFieldsTooLarge = 431,
/**
* @enum
* @name UnavailableForLegalReasons
* @description Represents HTTP status code 451: Unavailable For Legal Reasons.
* The server is denying access for legal reasons.
*/
UnavailableForLegalReasons = 451, UnavailableForLegalReasons = 451,
InternalServerError = 500, InternalServerError = 500,
@ -64,5 +265,5 @@ export enum HttpStatusCode {
InsufficientStorage = 507, InsufficientStorage = 507,
LoopDetected = 508, LoopDetected = 508,
NotExtended = 510, NotExtended = 510,
NetworkAuthenticationRequired = 511 NetworkAuthenticationRequired = 511,
} }

View File

@ -1,8 +1,8 @@
import type IDbBrand from "@interfaces/database/IDbBrand"; import type IDbBrand from "@interfaces/database/IDbBrand";
import MysqlService from "@services/mysql.service"; import MysqlService from "@services/mysql.service";
import { isDebugMode } from "@utils/debugState";
import { Logger } from "tslog"; import { Logger } from "tslog";
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from "uuid";
import {isDebugMode} from "@utils/debugState";
const DbHandler = new MysqlService.Handler("BrandService"); const DbHandler = new MysqlService.Handler("BrandService");
const logger = new Logger({ const logger = new Logger({

View File

@ -1,8 +1,8 @@
import type { IDbCategory } from "@interfaces/database/IDbCategory"; import type { IDbCategory } from "@interfaces/database/IDbCategory";
import MysqlService from "@services/mysql.service"; import MysqlService from "@services/mysql.service";
import { isDebugMode } from "@utils/debugState";
import { Logger } from "tslog"; import { Logger } from "tslog";
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from "uuid";
import {isDebugMode} from "@utils/debugState";
const DbHandler = new MysqlService.Handler("CategoryService"); const DbHandler = new MysqlService.Handler("CategoryService");
const logger = new Logger({ const logger = new Logger({

View File

@ -1,3 +1,4 @@
import { isDebugMode } from "@utils/debugState";
import { import {
type JWTHeaderParameters, type JWTHeaderParameters,
type JWTPayload, type JWTPayload,
@ -5,7 +6,6 @@ import {
jwtVerify, jwtVerify,
} from "jose"; } from "jose";
import { Logger } from "tslog"; import { Logger } from "tslog";
import {isDebugMode} from "@utils/debugState";
const logger = new Logger({ const logger = new Logger({
name: "JwtService", name: "JwtService",

View File

@ -1,8 +1,8 @@
import type IDbModel from "@interfaces/database/IDbModel"; import type IDbModel from "@interfaces/database/IDbModel";
import MysqlService from "@services/mysql.service"; import MysqlService from "@services/mysql.service";
import { isDebugMode } from "@utils/debugState";
import { Logger } from "tslog"; import { Logger } from "tslog";
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from "uuid";
import {isDebugMode} from "@utils/debugState";
const DbHandler = new MysqlService.Handler("ModelService"); const DbHandler = new MysqlService.Handler("ModelService");
const logger = new Logger({ const logger = new Logger({

View File

@ -10,9 +10,9 @@ import type { IDbStatusResult } from "@interfaces/database/IDbStatusResult";
import type { IDbUser } from "@interfaces/database/IDbUser"; import type { IDbUser } from "@interfaces/database/IDbUser";
import type { IDbVehicle } from "@interfaces/database/IDbVehicle"; import type { IDbVehicle } from "@interfaces/database/IDbVehicle";
import type { IUserUpdate } from "@interfaces/services/IUserUpdate"; import type { IUserUpdate } from "@interfaces/services/IUserUpdate";
import { isDebugMode } from "@utils/debugState";
import mysql, { type Connection, type ConnectionOptions } from "mysql2"; import mysql, { type Connection, type ConnectionOptions } from "mysql2";
import { Logger } from "tslog"; import { Logger } from "tslog";
import {isDebugMode} from "@utils/debugState";
const access: ConnectionOptions = { const access: ConnectionOptions = {
host: `${process.env["MYSQL_HOST"]}`, host: `${process.env["MYSQL_HOST"]}`,
@ -38,9 +38,10 @@ class MysqlHandler {
this.Logger.error(`\n\n> Error connecting to MySQL: \n${err}\n`); this.Logger.error(`\n\n> Error connecting to MySQL: \n${err}\n`);
process.exit(1); process.exit(1);
} }
if (isDebugMode()) this.Logger.debug( if (isDebugMode())
`\n\n> Connected to MySQL database (${access.database})\n`, this.Logger.debug(
); `\n\n> Connected to MySQL database (${access.database})\n`,
);
}); });
} }
closeConnection() { closeConnection() {
@ -82,12 +83,16 @@ class MysqlHandler {
(key: string) => `${key}`, (key: string) => `${key}`,
); );
const values = Object.values(data.values).map((val) => val); const values = Object.values(data.values).map((val) => val);
if (isDebugMode()) this.Logger.debug( if (isDebugMode())
`\n\n>-> Factorized ${_sqlQueryKeys.length} keys for a prepare Query.\n>-> Action: ${data.actionName}\n`, this.Logger.debug(
); `\n\n>-> Factorized ${_sqlQueryKeys.length} keys for a prepare Query.\n>-> Action: ${data.actionName}\n`,
);
const sqlQueryKeys = _sqlQueryKeys.join(", "); const sqlQueryKeys = _sqlQueryKeys.join(", ");
if (_id && _id.length > 2) { if (_id && _id.length > 2) {
if (isDebugMode()) this.Logger.trace(`\n\n> Id post-pushed in factorized data.\n ${_id}`); if (isDebugMode())
this.Logger.trace(
`\n\n> Id post-pushed in factorized data.\n ${_id}`,
);
values.push(_id); values.push(_id);
} }

View File

@ -1,9 +1,8 @@
import process from "node:process"; import process from "node:process";
export function isDebugMode() { export function isDebugMode() {
if (process.env["DEBUG"] === 'true') { if (process.env["DEBUG"] === "true") {
return true; return true;
} }
return false; return false;
} }