diff --git a/server/src/controllers/controllerUtils.ts b/server/src/controllers/controllerUtils.ts index f8447fd59..17159a03c 100755 --- a/server/src/controllers/controllerUtils.ts +++ b/server/src/controllers/controllerUtils.ts @@ -3,7 +3,7 @@ import { Monitor, type MonitorType, MonitorTypes, UserRole } from "@/types/index import sslChecker, { SSLDetails } from "ssl-checker"; type SSLCheckerType = typeof sslChecker; -const fetchMonitorCertificate = async (checker: SSLCheckerType, monitor: Monitor): Promise => { +export const fetchMonitorCertificate = async (checker: SSLCheckerType, monitor: Monitor): Promise => { const monitorUrl = new URL(monitor.url); const hostname = monitorUrl.hostname; const cert = await checker(hostname); @@ -12,14 +12,14 @@ const fetchMonitorCertificate = async (checker: SSLCheckerType, monitor: Monitor } return cert; }; -const requireString = (value: unknown, fieldName: string): string => { +export const requireString = (value: unknown, fieldName: string): string => { if (typeof value === "string" && value.trim().length > 0) { return value; } throw new AppError({ message: `${fieldName} is required`, status: 400 }); }; -const optionalString = (value: unknown, fieldName: string): string | undefined => { +export const optionalString = (value: unknown, fieldName: string): string | undefined => { if (value === undefined) { return undefined; } @@ -29,7 +29,7 @@ const optionalString = (value: unknown, fieldName: string): string | undefined = throw new AppError({ message: `${fieldName} must be a string`, status: 400 }); }; -const optionalNumber = (value: unknown, fieldName: string): number | undefined => { +export const optionalNumber = (value: unknown, fieldName: string): number | undefined => { if (value === undefined) { return undefined; } @@ -45,7 +45,7 @@ const optionalNumber = (value: unknown, fieldName: string): number | undefined = throw new AppError({ message: `${fieldName} must be a number`, status: 400 }); }; -const optionalBoolean = (value: unknown, fieldName: string): boolean | undefined => { +export const optionalBoolean = (value: unknown, fieldName: string): boolean | undefined => { if (value === undefined) { return undefined; } @@ -63,7 +63,7 @@ const optionalBoolean = (value: unknown, fieldName: string): boolean | undefined throw new AppError({ message: `${fieldName} must be a boolean`, status: 400 }); }; -const parseMonitorTypeFilter = (value: unknown): MonitorType | MonitorType[] | undefined => { +export const parseMonitorTypeFilter = (value: unknown): MonitorType | MonitorType[] | undefined => { const parseSingle = (input: unknown): MonitorType => { if (typeof input !== "string") { throw new AppError({ message: "Monitor type must be a string", status: 400 }); @@ -83,7 +83,7 @@ const parseMonitorTypeFilter = (value: unknown): MonitorType | MonitorType[] | u return parseSingle(value); }; -const parseSortOrder = (value: unknown): "asc" | "desc" | undefined => { +export const parseSortOrder = (value: unknown): "asc" | "desc" | undefined => { if (value === undefined) { return undefined; } @@ -93,42 +93,36 @@ const parseSortOrder = (value: unknown): "asc" | "desc" | undefined => { throw new AppError({ message: "order must be either 'asc' or 'desc'", status: 400 }); }; -const requireTeamId = (teamId?: string): string => { +export const requireTeamId = (teamId?: string): string => { if (!teamId) { throw new AppError({ message: "Team ID is required", status: 400 }); } return teamId; }; -const requireUserId = (userId?: string): string => { +export const requireUserId = (userId?: string): string => { if (!userId) { throw new AppError({ message: "User ID is required", status: 400 }); } return userId; }; -const requireUserEmail = (userEmail?: string): string => { +export const requireUserEmail = (userEmail?: string): string => { if (!userEmail) { throw new AppError({ message: "User email is required", status: 400 }); } return userEmail; }; +export const requireFirstName = (firstName?: string): string => { + if (!firstName) { + throw new AppError({ message: "First name is required", status: 400 }); + } + return firstName; +}; + export const requireUserRoles = (userRoles?: UserRole[]): UserRole[] => { if (!userRoles || userRoles.length === 0) { throw new AppError({ message: "User roles are required", status: 400 }); } return userRoles; }; - -export { - fetchMonitorCertificate, - requireString, - optionalString, - optionalNumber, - optionalBoolean, - parseMonitorTypeFilter, - parseSortOrder, - requireTeamId, - requireUserId, - requireUserEmail, -}; diff --git a/server/src/controllers/inviteController.ts b/server/src/controllers/inviteController.ts index b17d32e98..84f6c30ae 100755 --- a/server/src/controllers/inviteController.ts +++ b/server/src/controllers/inviteController.ts @@ -1,12 +1,13 @@ import { Request, Response, NextFunction } from "express"; import { inviteBodyValidation, inviteVerificationBodyValidation } from "@/validation/authValidation.js"; -import { requireTeamId, requireUserRoles } from "@/controllers/controllerUtils.js"; +import { requireFirstName, requireTeamId, requireUserRoles } from "@/controllers/controllerUtils.js"; +import { IInviteService } from "@/service/index.js"; const SERVICE_NAME = "inviteController"; class InviteController { static SERVICE_NAME = SERVICE_NAME; - private inviteService: any; - constructor(inviteService: any) { + private inviteService: IInviteService; + constructor(inviteService: IInviteService) { this.inviteService = inviteService; } @@ -34,8 +35,9 @@ class InviteController { sendInviteEmail = async (req: Request, res: Response, next: NextFunction) => { try { - const teamId = requireTeamId(req?.user?.teamId); - const userRoles = requireUserRoles(req?.user?.role); + const teamId = requireTeamId(req.user?.teamId); + const userRoles = requireUserRoles(req.user?.role); + const firstName = requireFirstName(req.user?.firstName); const inviteRequest = req.body; inviteRequest.teamId = teamId; @@ -43,7 +45,7 @@ class InviteController { const inviteToken = await this.inviteService.sendInviteEmail({ invite: inviteRequest, - firstName: req?.user?.firstName, + firstName, userRoles, }); return res.status(200).json({