diff --git a/src/controllers/calendarController.ts b/src/controllers/calendarController.ts index bfd21de..ce7b17a 100644 --- a/src/controllers/calendarController.ts +++ b/src/controllers/calendarController.ts @@ -38,7 +38,7 @@ export async function GetStoreId(req: Request, res: Response) { res.status(200).send({ storeId: store.store_id }); } catch (error) { - logger.error(error); + logger.error("GetStoreId error:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -161,7 +161,7 @@ export async function GetCalendarSettings(req: Request, res: Response) { userSettings: userSettings, }); } catch (error) { - logger.error(error); + logger.error("GetCalendarSettings error:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -257,7 +257,7 @@ export async function UpdatePersonalCalendarSettings( res.status(200).send({ msg: "calendar settings updated" }); } catch (error) { - logger.error(error); + logger.error("UpdatePersonalCalendarSettings error:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -327,7 +327,6 @@ export async function UpdateStoreCalendarSettings(req: Request, res: Response) { }); if (!store) { - logger.debug("Requester is not a store master"); return res.status(401).send({ err: "unauthorized" }); } @@ -371,7 +370,7 @@ export async function UpdateStoreCalendarSettings(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("UpdateStoreCalendarSettings error:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -407,7 +406,6 @@ export async function UnlinkGoogleCalendar(req: Request, res: Response) { const decodedPassword = decodeBase64(password); if (!isPasswordValid(decodedPassword)) { - logger.debug("Password is not valid"); return res.status(400).send({ err: "invalid request" }); } @@ -421,7 +419,6 @@ export async function UnlinkGoogleCalendar(req: Request, res: Response) { }); if (!user) { - logger.debug("User not found"); return res.status(400).send({ err: "invalid request" }); } @@ -430,7 +427,6 @@ export async function UnlinkGoogleCalendar(req: Request, res: Response) { const match = await matchPassword(decodedPassword, user.password); if (!match) { - logger.debug("Password is not valid"); return res.status(400).send({ err: "invalid request" }); } @@ -458,7 +454,7 @@ export async function UnlinkGoogleCalendar(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("UnlinkGoogleCalendar error:", error as string); res.status(500).send({ err: "invalid request" }); } } diff --git a/src/controllers/paymentController.ts b/src/controllers/paymentController.ts index adb2e22..42e870d 100644 --- a/src/controllers/paymentController.ts +++ b/src/controllers/paymentController.ts @@ -97,7 +97,7 @@ export async function GetPrices(req: Request, res: Response) { }), }); } catch (error) { - logger.error(error); + logger.error("GetPrices", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -135,9 +135,11 @@ export async function CreateCheckoutSession(priceId: string, userId: string) { user_id: userId, }); + logger.info(`CreateCheckoutSession: ${session.id}`); + return session.url; } catch (error) { - logger.error(error); + logger.error("CreateCheckoutSession", error as string); return ""; } } @@ -169,7 +171,7 @@ export async function CheckoutSuccess(req: Request, res: Response) { res.status(200).send({ status: 0 }); } catch (err) { - logger.error(err); + logger.error("CheckoutSuccess", err as string); res.status(500).send({ err: "invalid request" }); } } @@ -222,9 +224,11 @@ export async function CheckoutCanceled(req: Request, res: Response) { await userPendingPayment.destroy(); + logger.info(`CheckoutCanceled: ${sessionId}`); + res.status(200).send({ status: 1 }); - } catch (err) { - logger.error(err); + } catch (error) { + logger.error("CheckoutCanceled", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -247,9 +251,9 @@ export async function StripeWebhook(req: Request, res: Response) { sig, process.env.STRIPE_WEBHOOK_ENDPOINT_SECRET as string ); - } catch (err) { - logger.error("Webhook error", err); - return res.status(400).send(`Webhook Error: ${err}`); + } catch (error) { + logger.error("Webhook error", error as string); + return res.status(400).send(`Webhook Error: ${error}`); } if (event.type === "checkout.session.completed") { @@ -295,14 +299,14 @@ export async function StripeWebhook(req: Request, res: Response) { } } } else if (event.type === "checkout.session.expired") { - logger.info(`webhook checkout.session.expired: ${event.data}`); + logger.info(`webhook checkout.session.expired: ${event.data.object}`); } else { logger.warn(`Ignoring unknown event: ${event.type}`); } res.sendStatus(200); } catch (error) { - logger.error(error); + logger.error("StripeWebhook", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -340,7 +344,7 @@ export async function GetBillingPortal(req: Request, res: Response) { url: session.url, }); } catch (error) { - logger.error(error); + logger.error("GetBillingPortal", error as string); res.status(500).send({ err: "invalid request" }); } } diff --git a/src/controllers/storeController.ts b/src/controllers/storeController.ts index 14f4078..22df5ae 100644 --- a/src/controllers/storeController.ts +++ b/src/controllers/storeController.ts @@ -46,7 +46,7 @@ export async function GetStore(req: Request, res: Response) { }, }); } catch (error) { - logger.error(error); + logger.error("GetStore", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -113,7 +113,7 @@ export async function UpdateStore(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("UpdateStore", error as string); res.status(500).send({ err: "invalid request" }); } } diff --git a/src/controllers/storeServicesController.ts b/src/controllers/storeServicesController.ts index 2a9a305..219e4be 100644 --- a/src/controllers/storeServicesController.ts +++ b/src/controllers/storeServicesController.ts @@ -23,7 +23,6 @@ export async function GetStoreServices(req: Request, res: Response) { const { storeId } = req.params; if (!storeId) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -52,7 +51,7 @@ export async function GetStoreServices(req: Request, res: Response) { res.status(200).send({ services, users }); } catch (error) { - logger.error(error); + logger.error("GetStoreServices", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -62,7 +61,6 @@ export async function CreateStoreService(req: Request, res: Response) { const { storeId, name } = req.body; if (!storeId || !name || !isStoreServiceNameValid(name)) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -100,7 +98,7 @@ export async function CreateStoreService(req: Request, res: Response) { res.status(200).send({ service }); } catch (error) { - logger.error(error); + logger.error("CreateStoreService", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -110,7 +108,6 @@ export async function UpdateStoreService(req: Request, res: Response) { const { serviceId, name } = req.body; if (!serviceId || !name || !isStoreServiceNameValid(name)) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -163,7 +160,7 @@ export async function UpdateStoreService(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("UpdateStoreService", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -180,7 +177,6 @@ export async function CreateStoreServiceActivity(req: Request, res: Response) { !isStoreServiceActivityPriceValid(price) || !isStoreServiceActivityDurationValid(duration) ) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -248,7 +244,7 @@ export async function CreateStoreServiceActivity(req: Request, res: Response) { res.status(200).send({ activity }); } catch (error) { - logger.error(error); + logger.error("CreateStoreServiceActivity", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -282,7 +278,7 @@ export async function GetStoreServiceActivities(req: Request, res: Response) { res.status(200).send({ activities: activities }); } catch (error) { - logger.error(error); + logger.error("GetStoreServiceActivities", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -293,7 +289,6 @@ export async function UpdateStoreServiceActivity(req: Request, res: Response) { req.body; if (!activityId) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -418,7 +413,7 @@ export async function UpdateStoreServiceActivity(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("UpdateStoreServiceActivity", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -428,7 +423,6 @@ export async function DeleteStoreServiceActivity(req: Request, res: Response) { const { activityId } = req.params; if (!activityId) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -497,7 +491,7 @@ export async function DeleteStoreServiceActivity(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("DeleteStoreServiceActivity", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -507,7 +501,6 @@ export async function DeleteStoreService(req: Request, res: Response) { const { serviceId } = req.params; if (!serviceId) { - logger.debug("Invalid request"); return res.status(400).send({ err: "invalid request" }); } @@ -583,7 +576,7 @@ export async function DeleteStoreService(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("DeleteStoreService", error as string); res.status(500).send({ err: "invalid request" }); } } diff --git a/src/controllers/userController.ts b/src/controllers/userController.ts index 3470518..143ed61 100644 --- a/src/controllers/userController.ts +++ b/src/controllers/userController.ts @@ -179,7 +179,7 @@ export async function SignUp(req: Request, res: Response) { redirectUrl: checkoutSessionUrl, }); } catch (error) { - logger.error(error); + logger.error("signup error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -293,7 +293,7 @@ export async function Login(req: Request, res: Response) { // create session saveSession(req, res, user.user_id, rememberMe); } catch (error) { - logger.error(error); + logger.error("login error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -361,7 +361,7 @@ export async function ForgotPassword(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("forgot password error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -380,7 +380,7 @@ export async function Logout(req: Request, res: Response) { res.status(200).send({ msg: "logout successful" }); } catch (error) { - logger.error(error); + logger.error("logout error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -501,7 +501,7 @@ export async function GetUser(req: Request, res: Response) { res.status(200).send(respData); } catch (error) { - logger.error(error); + logger.error("get user error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -536,7 +536,7 @@ export async function IsEmailAvailable(req: Request, res: Response) { res.status(200).send({ msg: "email available" }); } catch (error) { - logger.error(error); + logger.error("is email available error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -560,7 +560,7 @@ export async function GetUserProfileSettings(req: Request, res: Response) { res.status(200).send(user); } catch (error) { - logger.error(error); + logger.error("get user profile settings error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -614,7 +614,7 @@ export async function UpdateUserProfileSettings(req: Request, res: Response) { res.status(200).send({ msg: "user profile settings updated" }); } catch (error) { - logger.error(error); + logger.error("update user profile settings error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -685,7 +685,7 @@ export async function UpdateUserProfilePassword(req: Request, res: Response) { res.status(200).send({ msg: "user password updated" }); } catch (error) { - logger.error(error); + logger.error("update user profile password error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -729,7 +729,7 @@ export async function GetUserProfileSessions(req: Request, res: Response) { currentSession: currentSession, }); } catch (error) { - logger.error(error); + logger.error("get user profile sessions error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -759,7 +759,7 @@ export async function DeleteUserProfileSession(req: Request, res: Response) { res.status(200).send({ msg: "session deleted" }); } catch (error) { - logger.error(error); + logger.error("delete user profile session error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -830,7 +830,7 @@ export async function DeleteUserProfile(req: Request, res: Response) { res.status(200).send({ msg: "user deleted" }); } catch (error) { - logger.error(error); + logger.error("delete user profile error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -912,7 +912,7 @@ export async function ExportUserAccount(req: Request, res: Response) { "User account exported and sent via email" ); } catch (error) { - logger.error(error); + logger.error("export user account error", error as string); } })(); @@ -920,7 +920,7 @@ export async function ExportUserAccount(req: Request, res: Response) { res.status(200).send({}); } catch (error) { - logger.error(error); + logger.error("export user account error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -947,7 +947,7 @@ export async function GetExportedUserAccount(req: Request, res: Response) { logger.info(`User account export downloaded: ${id}`); } catch (error) { - logger.error(error); + logger.error("get exported user account error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -1141,7 +1141,7 @@ export async function VerifyEmail(req: Request, res: Response) { res.status(400).send({ err: "invalid request" }); } catch (error) { - logger.error(error); + logger.error("verify email error", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -1208,7 +1208,7 @@ export async function UpdateUserProfileEmail(req: Request, res: Response) { res.status(200).send({ msg: "user email updated" }); } catch (error) { - logger.error(error); + logger.error("update user profile email error", error as string); res.status(500).send({ err: "invalid request" }); } } diff --git a/src/controllers/usersController.ts b/src/controllers/usersController.ts index a7a7509..3f5c1a1 100644 --- a/src/controllers/usersController.ts +++ b/src/controllers/usersController.ts @@ -209,7 +209,7 @@ export async function AddEmployee(req: Request, res: Response) { }, }); - logger.error("terminPlanerRequest err on add employee:", err); + logger.error("terminPlanerRequest err on add employee:", err as string); return res.status(500).send({ err: "invalid request" }); } @@ -227,7 +227,7 @@ export async function AddEmployee(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("AddEmployee err:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -239,7 +239,6 @@ export async function GetEmployees(req: Request, res: Response) { const requesterSession = await getUserSession(req); if (!requesterSession) { - logger.debug("Requester session not found"); return res.status(401).send({ err: "unauthorized" }); } @@ -257,12 +256,10 @@ export async function GetEmployees(req: Request, res: Response) { }); if (!store) { - logger.debug("Store not found"); return res.status(400).send({ err: "invalid request" }); } if (store.owner_user_id !== requesterSession.user_id) { - logger.debug("Requester is not the store owner"); return res.status(401).send({ err: "unauthorized" }); } @@ -299,7 +296,7 @@ export async function GetEmployees(req: Request, res: Response) { employees: filteredEmployees, }); } catch (error) { - logger.error(error); + logger.error("GetEmployees err:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -419,7 +416,7 @@ export async function UpdateEmployee(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("UpdateEmployee err:", error as string); res.status(500).send({ err: "invalid request" }); } } @@ -492,7 +489,7 @@ export async function DeleteEmployee(req: Request, res: Response) { res.status(200).send({ msg: "success" }); } catch (error) { - logger.error(error); + logger.error("DeleteEmployee err:", error as string); res.status(500).send({ err: "invalid request" }); } } diff --git a/src/logger/logger.ts b/src/logger/logger.ts index d17ac0b..7cd5f07 100644 --- a/src/logger/logger.ts +++ b/src/logger/logger.ts @@ -80,14 +80,14 @@ class MyTransport extends Transport { } } -const logger = winston.createLogger({ +const winlogger = winston.createLogger({ level: "debug", format: winston.format.json(), transports: [new MyTransport()], }); if (process.env.NODE_ENV !== "production") { - logger.add( + winlogger.add( new winston.transports.Console({ format: winston.format.simple(), }) @@ -110,7 +110,7 @@ class BaseLogger { } private log(level: string, id: string, ...messages: string[]) { - logger.log({ + winlogger.log({ level: level, logType: `${this.logTypePrefix}-${id}`, message: messages.join(" "), @@ -130,7 +130,30 @@ class StoreLogger extends BaseLogger { } } +class SystemLogger { + info(...messages: string[]) { + this.log("info", ...messages); + } + + error(...messages: string[]) { + this.log("error", ...messages); + } + + warn(...messages: string[]) { + this.log("warn", ...messages); + } + + private log(level: string, ...messages: string[]) { + winlogger.log({ + level: level, + logType: process.env.NODE_APP_NAME, + message: messages.join(" "), + }); + } +} + export const userLogger = new UserLogger(); export const storeLogger = new StoreLogger(); +export const logger = new SystemLogger(); export default logger; diff --git a/src/routes/calendarRoutes.ts b/src/routes/calendarRoutes.ts index 72debc6..49abc95 100644 --- a/src/routes/calendarRoutes.ts +++ b/src/routes/calendarRoutes.ts @@ -70,7 +70,7 @@ router.get( sub: sub, }); } catch (err) { - logger.error(err); + logger.error("termin planer request failed, err:", err as string); } const user = await User.findOne({ @@ -95,7 +95,7 @@ router.get( res.redirect(PASSPORT_SUCCESS_REDIRECT_URL); } catch (err) { - logger.error(err); + logger.error("auth/google/callback failed, err:", err as string); res.redirect(PASSPORT_FAILURE_REDIRECT_URL); } } diff --git a/src/utils/recaptcha.ts b/src/utils/recaptcha.ts index 3446b36..39a0ed8 100644 --- a/src/utils/recaptcha.ts +++ b/src/utils/recaptcha.ts @@ -48,7 +48,7 @@ async function verifyCaptcha(token: string, ip?: string): Promise { } } catch (error) { reject("Error verifying captcha"); - logger.error("Error verifying captcha:", error); + logger.error("Error verifying captcha:", error as string); } }); } diff --git a/src/utils/terminPlaner.ts b/src/utils/terminPlaner.ts index 49468c7..6a159f8 100644 --- a/src/utils/terminPlaner.ts +++ b/src/utils/terminPlaner.ts @@ -33,7 +33,7 @@ export async function isTerminPlanerGoogleCalendarConnected( return userGoogleToken; } catch (error) { - logger.warn("isTerminPlanerGoogleCalendarConnected err:", error); + logger.warn("isTerminPlanerGoogleCalendarConnected err:", error as string); return null; } }