4.2 KiB
Architecture Reference
Runtime Topology
- Next.js runtime serves UI routes and API routes (legacy custom server files are present but not active).
- Next.js
pages/router handles UI routes and API routes underpages/api/**. - Middleware (
middleware.js) injects CSP nonce and security headers on requests/responses. - State management initialized in
pages/_app.jswith Redux wrapper and persistence. - Authentication handled by
next-authinpages/api/auth/[...nextauth].jswith Prisma adapter.
Key Architectural Modules
- Presentation layer:
pages/,components/,styles/ - State layer:
store/store.js+ slice reducers - Domain/service helpers:
actions/,lib/ - Auth persistence: Prisma client +
prisma/schema.prisma(next-auth tables in SQL Server) - Portal business data access: API routes query Dynamics 365 CRM through Azure Service Bus Relay using REST + OData patterns
- Relay integrity check: forwarded CRM-bound API requests include a path-based hash, validated by relay with shared key before forwarding
- Infrastructure glue:
middleware.js,next.config.js,i18n.js(plus legacy server files not in active runtime)
High-Risk/Guarded Paths
pages/api/auth/[...nextauth].js- Email sign-in flow, callback/redirect logic, session setup.
middleware.jsand security headers innext.config.js- CSP and browser hardening policies.
store/store.js- HYDRATE, persistence, logout storage clearing.
prisma/schema.prisma- Source of truth for auth/account persistence tables.
- File and notification APIs in
pages/api/file/**,pages/api/email/**- Upload/document/email side effects and sensitive data handling.
i18n and Routing Model
- Locales:
en,cy(configured ini18n.js). - Locale detection disabled; domain and route rewrites drive behavior.
- Welsh route aliases maintained in
next.config.jsrewrites. - Any new user-facing route should consider:
- translation resources in
locales/enandlocales/cy - rewrite parity where a Welsh alias is expected
- auth pages and callback URLs for locale correctness
- translation resources in
External Integration Touchpoints
-
Dynamics 365 CRM (portal business data): reached via frontend API routes that send REST/OData queries through Azure Service Bus Relay.
-
Azure Service Bus Relay request integrity: relay endpoint is configured via
API_ROOT; request path (excluding domain) is hashed client-side and validated relay-side with shared hash key. -
Azure Storage/Queue:
actions/azurestorage.js, selected API handlers. -
GOV.UK Notify email:
actions/index.js,pages/api/email/**, next-auth email provider. -
Application Insights:
components/azureappinsights.jsand related environment configuration. -
Mapping embeds and map libs:
components/mapping/**, DNS/search components. -
PDF generation/rendering:
pages/api/file/generate*.js,components/pdftemplates/**.
Current Endpoint Contract Hardening Status (2026-03)
Recent bounded slices in the endpoint contract-consistency stream have standardized selected high-traffic handlers from raw relay error passthrough to structured response contracts (respondSuccess / respondError) with explicit required-input guards and phase21 contract coverage.
Completed clusters include:
- Search document retrieval cluster (
getsearchdocumenthistory*,getsearchdocumentdetails*,getsearchdocumentTypes_api) - My portal retrieval cluster (
getmycases_api,getmyrepresentations_api,getwatchedcases_api,getawaitingsubmission_api) - Basic search family cluster (
getbasicsearchdetails_api,getbasicsearchdetailspaged_api,getbasicsearchpaged_api,getbasicsearch_by_lparref_api)
Guardrail note: success payload contracts are intentionally preserved to avoid frontend regressions, while negative-path behavior is being normalized endpoint-by-endpoint with corresponding phase21 tests.
Legacy / Inactive Components
The following files exist in the repository but are not part of the current active runtime model:
server.jsserver/server.js
Guidance:
- Do not treat these files as active runtime architecture unless explicitly reactivated.
- If reactivation is proposed, document rationale and rollout/rollback in
memory-bank/change-log.mdandcontext/runbook.md.