not sure why those errors got removed we'll see

This commit is contained in:
2025-12-24 16:16:42 -08:00
parent 7399a27600
commit de3f21a7ec
20 changed files with 96 additions and 258 deletions

View File

@@ -375,7 +375,6 @@ router.put(
const updatedUser = await db.adminRepo.updateUserRole(params.id, body.role, req.log);
res.json(updatedUser);
} catch (error) {
logger.error({ error }, `Error updating user ${params.id}:`);
next(error);
}
},
@@ -421,7 +420,6 @@ router.post(
'Daily deal check job has been triggered successfully. It will run in the background.',
});
} catch (error) {
logger.error({ error }, '[Admin] Failed to trigger daily deal check job.');
next(error);
}
},
@@ -450,7 +448,6 @@ router.post(
message: `Analytics report generation job has been enqueued successfully. Job ID: ${job.id}`,
});
} catch (error) {
logger.error({ error }, '[Admin] Failed to enqueue analytics report job.');
next(error);
}
},
@@ -522,7 +519,6 @@ router.post(
message: `Successfully cleared the geocode cache. ${keysDeleted} keys were removed.`,
});
} catch (error) {
logger.error({ error }, '[Admin] Failed to clear geocode cache.');
next(error);
}
},

View File

@@ -134,8 +134,7 @@ router.post(
// If the email is a duplicate, return a 409 Conflict status.
return res.status(409).json({ message: error.message });
}
// The createUser method now handles its own transaction logging, so we just log the route failure.
logger.error({ error }, `User registration route failed for email: ${email}.`);
// Pass the error to the centralized handler
return next(error);
}
},
@@ -199,10 +198,6 @@ router.post('/login', (req: Request, res: Response, next: NextFunction) => {
// Return the full user profile object on login to avoid a second fetch on the client.
return res.json({ userprofile: userProfile, token: accessToken });
} catch (tokenErr) {
req.log.error(
{ error: tokenErr },
`Failed to save refresh token during login for user: ${userProfile.user.email}`,
);
return next(tokenErr);
}
},
@@ -307,7 +302,6 @@ router.post(
res.status(200).json({ message: 'Password has been reset successfully.' });
} catch (error) {
req.log.error({ error }, `An error occurred during password reset.`);
next(error);
}
},
@@ -331,7 +325,6 @@ router.post('/refresh-token', async (req: Request, res: Response, next: NextFunc
res.json({ token: newAccessToken });
} catch (error) {
req.log.error({ error }, 'An error occurred during /refresh-token.');
next(error);
}
});

View File

@@ -46,7 +46,6 @@ router.get('/', async (req: Request, res: Response, next: NextFunction) => {
const budgets = await budgetRepo.getBudgetsForUser(userProfile.user.user_id, req.log);
res.json(budgets);
} catch (error) {
req.log.error({ error, userId: userProfile.user.user_id }, 'Error fetching budgets');
next(error);
}
});
@@ -65,7 +64,6 @@ router.post(
const newBudget = await budgetRepo.createBudget(userProfile.user.user_id, body, req.log);
res.status(201).json(newBudget);
} catch (error: unknown) {
req.log.error({ error, userId: userProfile.user.user_id, body }, 'Error creating budget');
next(error);
}
},
@@ -90,10 +88,6 @@ router.put(
);
res.json(updatedBudget);
} catch (error: unknown) {
req.log.error(
{ error, userId: userProfile.user.user_id, budgetId: params.id },
'Error updating budget',
);
next(error);
}
},
@@ -113,10 +107,6 @@ router.delete(
await budgetRepo.deleteBudget(params.id, userProfile.user.user_id, req.log);
res.status(204).send(); // No Content
} catch (error: unknown) {
req.log.error(
{ error, userId: userProfile.user.user_id, budgetId: params.id },
'Error deleting budget',
);
next(error);
}
},
@@ -145,10 +135,6 @@ router.get(
);
res.json(spendingData);
} catch (error) {
req.log.error(
{ error, userId: userProfile.user.user_id, startDate, endDate },
'Error fetching spending analysis',
);
next(error);
}
},

View File

@@ -57,7 +57,6 @@ router.get('/', validateRequest(getFlyersSchema), async (req, res, next): Promis
const flyers = await db.flyerRepo.getFlyers(req.log, limit, offset);
res.json(flyers);
} catch (error) {
req.log.error({ error }, 'Error fetching flyers in /api/flyers:');
next(error);
}
});
@@ -72,7 +71,6 @@ router.get('/:id', validateRequest(flyerIdParamSchema), async (req, res, next):
const flyer = await db.flyerRepo.getFlyerById(params.id);
res.json(flyer);
} catch (error) {
req.log.error({ error, flyerId: params.id }, 'Error fetching flyer by ID:');
next(error);
}
});
@@ -89,7 +87,6 @@ router.get(
const items = await db.flyerRepo.getFlyerItems(params.id, req.log);
res.json(items);
} catch (error) {
req.log.error({ error }, 'Error fetching flyer items in /api/flyers/:id/items:');
next(error);
}
},

View File

@@ -38,7 +38,6 @@ router.get('/', async (req, res, next: NextFunction) => {
const achievements = await gamificationRepo.getAllAchievements(req.log);
res.json(achievements);
} catch (error) {
logger.error({ error }, 'Error fetching all achievements in /api/achievements:');
next(error);
}
});
@@ -61,7 +60,6 @@ router.get(
const leaderboard = await gamificationRepo.getLeaderboard(limit, req.log);
res.json(leaderboard);
} catch (error) {
logger.error({ error }, 'Error fetching leaderboard:');
next(error);
}
},
@@ -85,10 +83,6 @@ router.get(
);
res.json(userAchievements);
} catch (error) {
logger.error(
{ error, userId: userProfile.user.user_id },
'Error fetching user achievements:',
);
next(error);
}
},
@@ -122,10 +116,6 @@ adminGamificationRouter.post(
res.status(400).json({ message: error.message });
return;
}
logger.error(
{ error, userId: body.userId, achievementName: body.achievementName },
'Error awarding achievement via admin endpoint:',
);
next(error);
}
},

View File

@@ -39,10 +39,6 @@ router.get('/db-schema', validateRequest(emptySchema), async (req, res, next: Ne
}
return res.status(200).json({ success: true, message: 'All required database tables exist.' });
} catch (error: unknown) {
logger.error(
{ error: error instanceof Error ? error.message : error },
'Error during DB schema check:',
);
next(error);
}
});
@@ -62,10 +58,6 @@ router.get('/storage', validateRequest(emptySchema), async (req, res, next: Next
message: `Storage directory '${storagePath}' is accessible and writable.`,
});
} catch (error: unknown) {
logger.error(
{ error: error instanceof Error ? error.message : error },
`Storage check failed for path: ${storagePath}`,
);
next(
new Error(
`Storage check failed. Ensure the directory '${storagePath}' exists and is writable by the application.`,
@@ -96,10 +88,6 @@ router.get(
.json({ success: false, message: `Pool may be under stress. ${message}` });
}
} catch (error: unknown) {
logger.error(
{ error: error instanceof Error ? error.message : error },
'Error during DB pool health check:',
);
next(error);
}
},

View File

@@ -41,7 +41,6 @@ router.get(
const recipes = await db.recipeRepo.getRecipesBySalePercentage(query.minPercentage!, req.log);
res.json(recipes);
} catch (error) {
req.log.error({ error }, 'Error fetching recipes in /api/recipes/by-sale-percentage:');
next(error);
}
},
@@ -63,7 +62,6 @@ router.get(
);
res.json(recipes);
} catch (error) {
req.log.error({ error }, 'Error fetching recipes in /api/recipes/by-sale-ingredients:');
next(error);
}
},
@@ -85,7 +83,6 @@ router.get(
);
res.json(recipes);
} catch (error) {
req.log.error({ error }, 'Error fetching recipes in /api/recipes/by-ingredient-and-tag:');
next(error);
}
},
@@ -101,7 +98,6 @@ router.get('/:recipeId/comments', validateRequest(recipeIdParamsSchema), async (
const comments = await db.recipeRepo.getRecipeComments(params.recipeId, req.log);
res.json(comments);
} catch (error) {
req.log.error({ error }, `Error fetching comments for recipe ID ${req.params.recipeId}:`);
next(error);
}
});
@@ -116,7 +112,6 @@ router.get('/:recipeId', validateRequest(recipeIdParamsSchema), async (req, res,
const recipe = await db.recipeRepo.getRecipeById(params.recipeId, req.log);
res.json(recipe);
} catch (error) {
req.log.error({ error }, `Error fetching recipe ID ${req.params.recipeId}:`);
next(error);
}
});

View File

@@ -35,10 +35,6 @@ router.get(
const items = await db.adminRepo.getMostFrequentSaleItems(days!, limit!, req.log);
res.json(items);
} catch (error) {
req.log.error(
{ error },
'Error fetching most frequent sale items in /api/stats/most-frequent-sales:',
);
next(error);
}
},

View File

@@ -38,17 +38,11 @@ router.get(
message: 'Application process is not running under PM2.',
});
}
logger.error(
{ error: stderr || error.message },
'[API /pm2-status] Error executing pm2 describe:',
);
return next(error);
}
// Check if there was output to stderr, even if the exit code was 0 (success).
// This handles warnings or non-fatal errors that should arguably be treated as failures in this context.
if (stderr && stderr.trim().length > 0) {
logger.error({ stderr }, '[API /pm2-status] PM2 executed but produced stderr:');
return next(new Error(`PM2 command produced an error: ${stderr}`));
}

View File

@@ -77,7 +77,7 @@ router.use(passport.authenticate('jwt', { session: false }));
// Ensure the directory for avatar uploads exists.
const avatarUploadDir = path.join(process.cwd(), 'public', 'uploads', 'avatars');
fs.mkdir(avatarUploadDir, { recursive: true }).catch((err) => {
logger.error('Failed to create avatar upload directory:', err);
logger.error({ err }, 'Failed to create avatar upload directory');
});
// Define multer storage configuration. The `req.user` object will be available
@@ -214,7 +214,6 @@ router.get('/profile', validateRequest(emptySchema), async (req, res, next: Next
);
res.json(fullUserProfile);
} catch (error) {
logger.error({ error }, `[ROUTE] GET /api/users/profile - ERROR`);
next(error);
}
});
@@ -239,7 +238,6 @@ router.put(
);
res.json(updatedProfile);
} catch (error) {
logger.error({ error }, `[ROUTE] PUT /api/users/profile - ERROR`);
next(error);
}
},
@@ -264,7 +262,6 @@ router.put(
await db.userRepo.updateUserPassword(userProfile.user.user_id, hashedPassword, req.log);
res.status(200).json({ message: 'Password updated successfully.' });
} catch (error) {
logger.error({ error }, `[ROUTE] PUT /api/users/profile/password - ERROR`);
next(error);
}
},
@@ -300,7 +297,6 @@ router.delete(
await db.userRepo.deleteUserById(userProfile.user.user_id, req.log);
res.status(200).json({ message: 'Account deleted successfully.' });
} catch (error) {
logger.error({ error }, `[ROUTE] DELETE /api/users/account - ERROR`);
next(error);
}
},
@@ -316,7 +312,6 @@ router.get('/watched-items', validateRequest(emptySchema), async (req, res, next
const items = await db.personalizationRepo.getWatchedItems(userProfile.user.user_id, req.log);
res.json(items);
} catch (error) {
logger.error({ error }, `[ROUTE] GET /api/users/watched-items - ERROR`);
next(error);
}
});
@@ -345,11 +340,6 @@ router.post(
if (error instanceof ForeignKeyConstraintError) {
return res.status(400).json({ message: error.message });
}
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
logger.error({
errorMessage,
body: req.body,
});
next(error);
}
},
@@ -376,7 +366,6 @@ router.delete(
);
res.status(204).send();
} catch (error) {
logger.error({ error }, `[ROUTE] DELETE /api/users/watched-items/:masterItemId - ERROR`);
next(error);
}
},
@@ -395,7 +384,6 @@ router.get(
const lists = await db.shoppingRepo.getShoppingLists(userProfile.user.user_id, req.log);
res.json(lists);
} catch (error) {
logger.error({ error }, `[ROUTE] GET /api/users/shopping-lists - ERROR`);
next(error);
}
},
@@ -421,10 +409,6 @@ router.get(
);
res.json(list);
} catch (error) {
logger.error(
{ error, listId: params.listId },
`[ROUTE] GET /api/users/shopping-lists/:listId - ERROR`,
);
next(error);
}
},
@@ -453,11 +437,6 @@ router.post(
if (error instanceof ForeignKeyConstraintError) {
return res.status(400).json({ message: error.message });
}
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
logger.error({
errorMessage,
body: req.body,
});
next(error);
}
},
@@ -478,11 +457,6 @@ router.delete(
await db.shoppingRepo.deleteShoppingList(params.listId, userProfile.user.user_id, req.log);
res.status(204).send();
} catch (error: unknown) {
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
logger.error(
{ errorMessage, params: req.params },
`[ROUTE] DELETE /api/users/shopping-lists/:listId - ERROR`,
);
next(error);
}
},
@@ -516,12 +490,6 @@ router.post(
if (error instanceof ForeignKeyConstraintError) {
return res.status(400).json({ message: error.message });
}
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
logger.error({
errorMessage,
params: req.params,
body: req.body,
});
next(error);
}
},
@@ -556,10 +524,6 @@ router.put(
);
res.json(updatedItem);
} catch (error: unknown) {
logger.error(
{ error, params: req.params, body: req.body },
`[ROUTE] PUT /api/users/shopping-lists/items/:itemId - ERROR`,
);
next(error);
}
},
@@ -581,10 +545,6 @@ router.delete(
await db.shoppingRepo.removeShoppingListItem(params.itemId, req.log);
res.status(204).send();
} catch (error: unknown) {
logger.error(
{ error, params: req.params },
`[ROUTE] DELETE /api/users/shopping-lists/items/:itemId - ERROR`,
);
next(error);
}
},
@@ -613,7 +573,6 @@ router.put(
);
res.json(updatedProfile);
} catch (error) {
logger.error({ error }, `[ROUTE] PUT /api/users/profile/preferences - ERROR`);
next(error);
}
},
@@ -632,7 +591,6 @@ router.get(
);
res.json(restrictions);
} catch (error) {
logger.error({ error }, `[ROUTE] GET /api/users/me/dietary-restrictions - ERROR`);
next(error);
}
},
@@ -661,11 +619,6 @@ router.put(
if (error instanceof ForeignKeyConstraintError) {
return res.status(400).json({ message: error.message });
}
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
logger.error({
errorMessage,
body: req.body,
});
next(error);
}
},
@@ -681,7 +634,6 @@ router.get('/me/appliances', validateRequest(emptySchema), async (req, res, next
);
res.json(appliances);
} catch (error) {
logger.error({ error }, `[ROUTE] GET /api/users/me/appliances - ERROR`);
next(error);
}
});
@@ -709,11 +661,6 @@ router.put(
if (error instanceof ForeignKeyConstraintError) {
return res.status(400).json({ message: error.message });
}
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
logger.error({
errorMessage,
body: req.body,
});
next(error);
}
},
@@ -803,10 +750,6 @@ router.delete(
await db.recipeRepo.deleteRecipe(params.recipeId, userProfile.user.user_id, false, req.log);
res.status(204).send();
} catch (error) {
logger.error(
{ error, params: req.params },
`[ROUTE] DELETE /api/users/recipes/:recipeId - ERROR`,
);
next(error);
}
},
@@ -847,10 +790,6 @@ router.put(
);
res.json(updatedRecipe);
} catch (error) {
logger.error(
{ error, params: req.params, body: req.body },
`[ROUTE] PUT /api/users/recipes/:recipeId - ERROR`,
);
next(error);
}
},