/** * Custom error classes * Implements Open/Closed Principle: Extensible for new error types */ export abstract class AppError extends Error { abstract statusCode: number; constructor(message: string) { super(message); this.name = this.constructor.name; Error.captureStackTrace(this, this.constructor); } } export class NotFoundError extends AppError { statusCode = 404; } export class ValidationError extends AppError { statusCode = 400; } export class UnauthorizedError extends AppError { statusCode = 401; } export class ForbiddenError extends AppError { statusCode = 403; } export class ConflictError extends AppError { statusCode = 409; } export class InternalServerError extends AppError { statusCode = 500; }