diff --git a/server/src/service/business/checkService.ts b/server/src/service/business/checkService.ts index fd7f07a55..caf398740 100644 --- a/server/src/service/business/checkService.ts +++ b/server/src/service/business/checkService.ts @@ -1,6 +1,6 @@ import { Types } from "mongoose"; import { IChecksRepository, IMonitorsRepository } from "@/repositories/index.js"; -import type { MonitorStatusResponse, CheckErrorInfo, Check } from "@/types/index.js"; +import type { MonitorStatusResponse, CheckErrorInfo, Check, ILighthouseAudit } from "@/types/index.js"; import type { HardwareStatusPayload, PageSpeedStatusPayload } from "@/types/network.js"; import { AppError } from "@/utils/AppError.js"; import { ParseBoolean } from "@/utils/utils.js"; @@ -13,7 +13,7 @@ class CheckService { private monitorsRepository: IMonitorsRepository; private checksRepository: IChecksRepository; - private logger: any; + private logger: ILogger; constructor(monitorsRepository: IMonitorsRepository, logger: ILogger, checksRepository: IChecksRepository) { this.monitorsRepository = monitorsRepository; this.logger = logger; @@ -53,13 +53,12 @@ class CheckService { message: "Failed to build check", service: SERVICE_NAME, method: "buildCheck", - details: "empty payload", }); return undefined; } const categories = pageSpeedPayload.lighthouseResult?.categories ?? {}; const audits = pageSpeedPayload.lighthouseResult?.audits ?? {}; - const mapAudit = (audit: any) => { + const mapAudit = (audit: ILighthouseAudit | undefined) => { if (!audit || typeof audit !== "object") { return undefined; } @@ -102,7 +101,7 @@ class CheckService { return check; }; - getChecksByMonitor = async ({ monitorId, query, teamId }: { monitorId: string; query: any; teamId: string }) => { + getChecksByMonitor = async ({ monitorId, query, teamId }: { monitorId: string; query: Record; teamId: string }) => { if (!monitorId) { throw new AppError({ message: "No monitor ID in request", service: SERVICE_NAME, method: "getChecksByMonitor", status: 400 }); } @@ -110,28 +109,34 @@ class CheckService { throw new AppError({ message: "No team ID in request", service: SERVICE_NAME, method: "getChecksByMonitor", status: 400 }); } - // For verificaiton, throws an error if monitor doesn't belong to team + // For verification, throws an error if monitor doesn't belong to team await this.monitorsRepository.findById(monitorId, teamId); - let { sortOrder, dateRange, filter, page, rowsPerPage, status } = query; + const { sortOrder, dateRange, filter, page, rowsPerPage, status } = query; + if (!sortOrder || !dateRange || !filter || !page || !rowsPerPage) { + throw new AppError({ message: "Missing required query parameters", service: SERVICE_NAME, method: "getChecksByMonitor", status: 400 }); + } const parsedStatus = typeof status === "undefined" ? status : ParseBoolean(status); - const parsedPage = page ? parseInt(page) : page; - const parsedRowsPerPage = rowsPerPage ? parseInt(rowsPerPage) : rowsPerPage; + const parsedPage = page ? parseInt(page) : 0; + const parsedRowsPerPage = rowsPerPage ? parseInt(rowsPerPage) : 5; const result = await this.checksRepository.findByMonitorId(monitorId, sortOrder, dateRange, filter, parsedPage, parsedRowsPerPage, parsedStatus); return result; }; - getChecksByTeam = async ({ teamId, query }: { teamId: string; query: any }) => { - let { sortOrder, dateRange, filter, page, rowsPerPage } = query; + getChecksByTeam = async ({ teamId, query }: { teamId: string; query: Record }) => { + const { sortOrder, dateRange, filter, page, rowsPerPage } = query; + if (!sortOrder || !dateRange || !filter || !page || !rowsPerPage) { + throw new AppError({ message: "Missing required query parameters", service: SERVICE_NAME, method: "getChecksByTeam", status: 400 }); + } if (!teamId) { throw new AppError({ message: "No team ID in request", service: SERVICE_NAME, method: "getChecksByTeam", status: 400 }); } - const parsedPage = page ? parseInt(page) : page; - const parsedRowsPerPage = rowsPerPage ? parseInt(rowsPerPage) : rowsPerPage; + const parsedPage = page ? parseInt(page) : 0; + const parsedRowsPerPage = rowsPerPage ? parseInt(rowsPerPage) : 5; const checkData = await this.checksRepository.findByTeamId(sortOrder, dateRange, filter, parsedPage, parsedRowsPerPage, teamId); return checkData; @@ -154,7 +159,7 @@ class CheckService { throw new AppError({ message: "No team ID in request", service: SERVICE_NAME, method: "deleteChecks", status: 400 }); } - // For verificaiton, throws an error if monitor doesn't belong to team + // For verification, throws an error if monitor doesn't belong to team await this.monitorsRepository.findById(monitorId, teamId); const deletedCount = await this.checksRepository.deleteByMonitorId(monitorId); @@ -170,7 +175,7 @@ class CheckService { }; updateChecksTTL = async ({ teamId, ttl }: { teamId: string; ttl: string }) => { - throw new AppError({ message: "Not implemented", service: SERVICE_NAME, method: "updateChecksTTL", status: 500 }); + throw new AppError({ message: "Not implemented", service: SERVICE_NAME, method: "updateChecksTTL", status: 500, details: { teamId, ttl } }); }; } diff --git a/server/src/service/infrastructure/bufferService.ts b/server/src/service/infrastructure/bufferService.ts index a56ae4bd8..c832c364b 100755 --- a/server/src/service/infrastructure/bufferService.ts +++ b/server/src/service/infrastructure/bufferService.ts @@ -19,8 +19,8 @@ class BufferService implements IBufferService { private BUFFER_TIMEOUT: number; private logger: ILogger; private SERVICE_NAME: string; - private buffer: any[]; - private geoBuffer: any[]; + private buffer: Check[]; + private geoBuffer: GeoCheck[]; private bufferTimer: NodeJS.Timeout | null = null; private checksService: any; private geoChecksService: IGeoChecksService;