diff --git a/src/controllers/sites.js b/src/controllers/sites.js index c76d454ed..afc9ff708 100755 --- a/src/controllers/sites.js +++ b/src/controllers/sites.js @@ -1303,6 +1303,32 @@ function SitesController(ctx, log, env) { } }; + const patchPageCitabilityStatus = async (context) => { + const { siteId } = context.params; + const { url, httpStatus } = context.data || {}; + + if (!hasText(url)) { + return badRequest('url is required'); + } + + if (httpStatus !== 404) { + return ok({ url, httpStatus, updated: false }); + } + + const { PageCitability } = dataAccess; + const record = await PageCitability.findByUrl(url); + if (!record) { + return ok({ url, httpStatus, updated: false }); + } + + record.setIsDeployedAtEdge(false); + record.setCitabilityScore(0); + await record.save(); + + log.info(`Cleared edge deployment status for 404 page: ${url} (site: ${siteId})`); + return ok({ url, httpStatus, updated: true }); + }; + return { createSite, getAll, @@ -1317,6 +1343,7 @@ function SitesController(ctx, log, env) { updateSite, updateCdnLogsConfig, getPageCitabilityCounts, + patchPageCitabilityStatus, getTopPages, resolveSite, getBrandProfile, diff --git a/src/routes/index.js b/src/routes/index.js index 83d8c2286..a7388fc3d 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -340,6 +340,7 @@ export default function getRouteHandlers( 'GET /sites/:siteId/brand-profile': sitesController.getBrandProfile, 'POST /sites/:siteId/brand-profile': sitesController.triggerBrandProfile, 'GET /sites/:siteId/page-citability/counts': sitesController.getPageCitabilityCounts, + 'PATCH /sites/:siteId/page-citability/status': sitesController.patchPageCitabilityStatus, 'GET /sites/:siteId/top-pages': sitesController.getTopPages, 'GET /sites/:siteId/top-pages/:source': sitesController.getTopPages, 'GET /sites/:siteId/top-pages/:source/:geo': sitesController.getTopPages, diff --git a/src/routes/required-capabilities.js b/src/routes/required-capabilities.js index cc7d101e8..ef813a558 100644 --- a/src/routes/required-capabilities.js +++ b/src/routes/required-capabilities.js @@ -235,6 +235,7 @@ const routeRequiredCapabilities = { 'GET /sites/:siteId': 'site:read', 'PATCH /sites/:siteId': 'site:write', 'PATCH /sites/:siteId/config/cdn-logs': 'site:write', + 'PATCH /sites/:siteId/page-citability/status': 'site:write', 'DELETE /sites/:siteId': 'site:write', 'GET /sites/:siteId/bot-blocker': 'site:read', 'GET /sites/:siteId/audits': 'audit:read', diff --git a/test/controllers/sites.test.js b/test/controllers/sites.test.js index af91e843b..41489f19d 100644 --- a/test/controllers/sites.test.js +++ b/test/controllers/sites.test.js @@ -133,6 +133,7 @@ describe('Sites Controller', () => { 'updateSite', 'updateCdnLogsConfig', 'getPageCitabilityCounts', + 'patchPageCitabilityStatus', 'getTopPages', 'getSiteMetricsBySource', 'getPageMetricsBySource',