Feature: Maintenance Mode
Introdução ao documento
Este documento descreve a feature de modo manutenção, composta pelo middleware global e pela tela /maintenance, além do desvio por manutenção em nível de curso.
Evidências:
Versionamento
Atualizar este documento quando mudarem:
- o timeout e a política do middleware;
- os caminhos liberados durante manutenção;
- os campos usados na tela de manutenção;
- a distinção entre manutenção global e manutenção por curso.
Evidências:
Referencial teórico
O mapeamento desta feature foi derivado do middleware, da página dedicada de manutenção e do adapter getMaintenanceMode.
Evidências:
../../middleware.ts#L1-L40../../app/maintenance/page.tsx#L17-L47../../src/features/api/external/wp/getMaintenanceMode/getMaintenanceMode.ts#L4-L31
Visão geral
- O
middlewareconsultagetMaintenanceMode()e redireciona quase toda navegação web para/maintenancequandoactive = true(middleware.ts#L7-L29). - A página
/maintenancetambém consultagetMaintenanceMode()e usa os campos remotos quando o modo estiver realmente ativo (maintenance/page.tsx#L24-L32). - A página de curso ainda pode renderizar manutenção específica de curso quando a customização tiver
maintenance_mode_course_register_active(app/[slug]/page.tsx#L31-L40).
Atores
- Participante navegando no site (middleware.ts#L24-L29).
- App Next.js middleware + página server-side (middleware.ts#L4-L35, maintenance/page.tsx#L17-L47).
- Backend WordPress que informa o estado de manutenção (getMaintenanceMode.ts#L16-L29).
Pré-condições
- O adapter
getMaintenanceModeprecisa responder antes do timeout do middleware para que o bloqueio global aconteça (middleware.ts#L7-L13). - A página dedicada depende de
getMaintenanceMode()para saber se deve usar conteúdo remoto ou defaults locais (maintenance/page.tsx#L24-L32).
Fluxo principal
- O
middlewarechamagetMaintenanceMode()e monta um timeout de 3 segundos (middleware.ts#L7-L13). - Se
active = truee a URL não estiver emallowedPaths, a requisição é redirecionada para/maintenance(middleware.ts#L15-L29). - A página
/maintenancebusca o mesmo estado de manutenção e exibe título, mensagem e descrição (maintenance/page.tsx#L24-L43).
Fluxos alternativos
- Se a consulta do middleware falhar ou estourar timeout, a navegação segue normalmente (
fail-open) (middleware.ts#L5-L6, middleware.ts#L30-L35). - Se o modo não estiver ativo na própria página de manutenção, a tela usa os valores default do componente (maintenance/page.tsx#L17-L22, maintenance/page.tsx#L28-L32).
- A página de curso pode renderizar manutenção em nível de curso sem depender do redirecionamento global do middleware (app/[slug]/page.tsx#L31-L40).
Regras de negócio
- O middleware usa timeout de 3 segundos para a checagem e, em erro, adota política
fail-open(middleware.ts#L5-L13, middleware.ts#L30-L35). - As rotas
/maintenance,/fonts,/images,/layout,/loadinge/not-foundficam liberadas mesmo com manutenção ativa (middleware.ts#L15-L22). - A página
/maintenancesó usamaintenanceMode.fields.*quandomaintenanceMode?.activeestiver verdadeiro (maintenance/page.tsx#L26-L32). - A página de curso trata
maintenance_mode_course_register_activevindo da customização como motivo para renderizar manutenção contextual combannerelogodo curso (app/[slug]/page.tsx#L31-L39, getCourseDetails.ts#L14-L18).
Estados possíveis
- Manutenção ativa / inativa (middleware.ts#L24-L29, maintenance/page.tsx#L26-L32).
- Timeout/erro com navegação liberada (
fail-open) (middleware.ts#L9-L13, middleware.ts#L30-L35). - Manutenção global / manutenção por curso (middleware.ts#L24-L29, app/[slug]/page.tsx#L31-L40).
Endpoints envolvidos
- O fluxo principal não usa endpoint interno coberto pelo OpenAPI; a feature depende do adapter externo
getMaintenanceMode(middleware.ts#L7-L13, getMaintenanceMode.ts#L16-L29). - Referência de contrato interno disponível:
OpenAPI, sem path correspondente para manutenção.
Dados impactados
- A feature consome
MaintenanceModee, no caso da manutenção por curso, campos deCourseCustomization(maintenance/page.tsx#L24-L32, app/[slug]/page.tsx#L31-L39).
Pendências
- O OpenAPI local não possui endpoint interno para manutenção.
- Confirmar se a coexistência entre manutenção global e manutenção específica de curso é desenho definitivo.
Evidências: