diff --git a/src/middlewares/errorHandler.ts b/src/middlewares/errorHandler.ts index 99b22b3..ed18032 100644 --- a/src/middlewares/errorHandler.ts +++ b/src/middlewares/errorHandler.ts @@ -8,9 +8,12 @@ const errorHandler = ( err: unknown, _req: Request, res: Response, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - next?: NextFunction, + next: NextFunction, ) => { + if (res.headersSent) { + return next(err); + } + if (err instanceof AppError) { return res.status(err.statusCode).json({ success: false, diff --git a/src/middlewares/requireRole.ts b/src/middlewares/requireRole.ts index 68f9fb7..430ed80 100644 --- a/src/middlewares/requireRole.ts +++ b/src/middlewares/requireRole.ts @@ -8,35 +8,39 @@ import { IOrganization } from "@modules/organization/organization.types"; const requireRole = (allowedRoles: UserRole[]) => { return async (req: Request, _res: Response, next: NextFunction) => { - const user = req.user as IUser; + try { + const user = req.user as IUser; - if (!user) { - return next(AppError.unauthorized("User not found")); - } + if (!user) { + return next(AppError.unauthorized("User not found")); + } - const orgResult = await OrganizationService.getUserOrganization( - user._id.toString(), - ); + const orgResult = await OrganizationService.getUserOrganization( + user._id.toString(), + ); - if (!orgResult.success) { - return next(AppError.notFound("User does not have an organization")); - } + if (!orgResult.success) { + return next(AppError.notFound("User does not have an organization")); + } - const successfulOrgResult = orgResult as ISuccessPayload<{ - organization: IOrganization; - role: UserRole; - }>; + const successfulOrgResult = orgResult as ISuccessPayload<{ + organization: IOrganization; + role: UserRole; + }>; - if (!allowedRoles.includes(successfulOrgResult.data.role)) { - return next( - AppError.forbidden( - `Access denied. Required roles: ${allowedRoles.join(", ")}`, - ), - ); + if (!allowedRoles.includes(successfulOrgResult.data.role)) { + return next( + AppError.forbidden( + `Access denied. Required roles: ${allowedRoles.join(", ")}`, + ), + ); + } + req.userOrg = successfulOrgResult.data.organization; + req.userRole = successfulOrgResult.data.role; + next(); + } catch (err) { + next(err); } - req.userOrg = successfulOrgResult.data.organization; - req.userRole = successfulOrgResult.data.role; - next(); }; };