refactor: centralize error handling utilities across route modules

- Introduced a new common utility module for error handling, providing consistent methods for retrieving error messages and logging errors.
- Updated individual route modules to utilize the shared error handling functions, reducing code duplication and improving maintainability.
- Ensured all routes now log errors in a standardized format, enhancing debugging and monitoring capabilities.
This commit is contained in:
Cody Seibert
2025-12-14 17:59:16 -05:00
parent 6b30271441
commit 01bae7d43e
25 changed files with 154 additions and 212 deletions

View File

@@ -3,19 +3,13 @@
*/
import { createLogger } from "../../lib/logger.js";
import {
getErrorMessage as getErrorMessageShared,
createLogError,
} from "../common.js";
const logger = createLogger("Templates");
export const logger = createLogger("Templates");
/**
* Get error message from error object
*/
export function getErrorMessage(error: unknown): string {
return error instanceof Error ? error.message : "Unknown error";
}
/**
* Log error details consistently
*/
export function logError(error: unknown, context: string): void {
logger.error(`${context}:`, error);
}
// Re-export shared utilities
export { getErrorMessageShared as getErrorMessage };
export const logError = createLogError(logger);

View File

@@ -7,10 +7,7 @@ import { spawn } from "child_process";
import path from "path";
import fs from "fs/promises";
import { addAllowedPath } from "../../../lib/security.js";
import { createLogger } from "../../../lib/logger.js";
import { getErrorMessage, logError } from "../common.js";
const logger = createLogger("Templates");
import { logger, getErrorMessage, logError } from "../common.js";
export function createCloneHandler() {
return async (req: Request, res: Response): Promise<void> => {
@@ -59,10 +56,11 @@ export function createCloneHandler() {
const resolvedProject = path.resolve(projectPath);
const relativePath = path.relative(resolvedParent, resolvedProject);
if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) {
return res.status(400).json({
res.status(400).json({
success: false,
error: "Invalid project name; potential path traversal attempt.",
});
return;
}
// Check if directory already exists
@@ -199,7 +197,6 @@ export function createCloneHandler() {
projectName: sanitizedName,
});
} catch (error) {
logger.error("[Templates] Clone error:", error);
logError(error, "Clone template failed");
res.status(500).json({ success: false, error: getErrorMessage(error) });
}