diff --git a/Server/controllers/pageSpeedCheckController.js b/Server/controllers/pageSpeedCheckController.js index c9f5873bc..af3dd92da 100644 --- a/Server/controllers/pageSpeedCheckController.js +++ b/Server/controllers/pageSpeedCheckController.js @@ -1,5 +1,7 @@ const PageSpeedCheck = require("../models/PageSpeedCheck"); +const PageSpeedService = require("../service/pageSpeedService"); const { successMessages } = require("../utils/messages"); +const pageSpeedService = new PageSpeedService(); const SERVICE_NAME = "pagespeed"; const { getPageSpeedCheckParamValidation, @@ -47,18 +49,26 @@ const createPageSpeedCheck = async (req, res, next) => { await createPageSpeedCheckBodyValidation.validateAsync(req.body); const { monitorId } = req.params; - const { accessibility, bestPractices, seo, performance } = req.body; + const { url } = req.body; - const newPageSpeedCheck = new PageSpeedCheck({ + // Run the PageSpeed check + const pageSpeedResults = await pageSpeedService.runPageSpeedCheck(url); + + // Extract categories scores + const categories = pageSpeedResults.lighthouseResult?.categories; + + if (!categories) { + throw new Error('Categories not found in PageSpeed results'); + } + + const newPageSpeedCheck = await pageSpeedService.createPageSpeedCheck({ monitorId, - accessibility, - bestPractices, - seo, - performance, + accessibility: (categories.accessibility?.score || 0) * 100, + bestPractices: (categories["best-practices"]?.score || 0) * 100, + seo: (categories.seo?.score || 0) * 100, + performance: (categories.performance?.score || 0) * 100, }); - await newPageSpeedCheck.save(); - return res.status(201).json({ msg: successMessages.CREATED, data: newPageSpeedCheck, diff --git a/Server/routes/pageSpeedCheckRoute.js b/Server/routes/pageSpeedCheckRoute.js index bb140e575..34ec0e544 100644 --- a/Server/routes/pageSpeedCheckRoute.js +++ b/Server/routes/pageSpeedCheckRoute.js @@ -4,42 +4,43 @@ const Monitor = require("../models/Monitor"); const checkController = require("../controllers/pageSpeedCheckController"); /** - * @route POST /pagespeed/:monitorId + * @route POST /:monitorId * @description Create a new PageSpeedCheck for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ router.post( - "/pagespeed/:monitorId", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.createPageSpeedCheck ); /** - * @route GET /pagespeed/:monitorId + * @route GET /:monitorId * @description Get all PageSpeedChecks for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ router.get( - "/pagespeed/:monitorId", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.getPageSpeedChecks ); /** - * @route DELETE /pagespeed/:monitorId + * @route DELETE /:monitorId * @description Delete all PageSpeedChecks for a monitor * @access Private * @param {string} monitorId - The ID of the monitor * @middleware verifyOwnership - Ensures the user owns the monitor */ router.delete( - "/pagespeed/:monitorId", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.deletePageSpeedCheck ); module.exports = router; + diff --git a/Server/service/pageSpeedService.js b/Server/service/pageSpeedService.js index 1b7bd25e1..20eada0d5 100644 --- a/Server/service/pageSpeedService.js +++ b/Server/service/pageSpeedService.js @@ -14,7 +14,10 @@ class PageSpeedService { */ async runPageSpeedCheck(url) { try { - const response = await axios.get(`https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${url}`); + const response = await axios.get( + "https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.google.com&category=seo&category=accessibility&category=best-practices&category=performance", + ); + return response.data; } catch (error) { logger.error(`Error running PageSpeed check for ${url}`, { diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 98c3e3835..ffb9a3f6e 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -227,11 +227,7 @@ const createPageSpeedCheckParamValidation = joi.object({ //Validation schema for the monitorId body const createPageSpeedCheckBodyValidation = joi.object({ - monitorId: joi.string().required(), - accessibility: joi.number().required().min(0).max(100), - bestPractices: joi.number().required().min(0).max(100), - seo: joi.number().required().min(0).max(100), - performance: joi.number().required().min(0).max(100), + url: joi.string().required(), }); const deletePageSpeedCheckParamValidation = joi.object({