// lib/newappeal/loadNewAppealPage.js import { getSession } from "next-auth/react"; import { getAppealsTypesForNewAppeal, getMandatoryFields, getPickLists } from "../../actions/services/referenceDataService"; import { getProgressFromBlob } from "../../actions/services/documentService"; import { getPersonalAccount } from "../../actions/services/accountService"; import { consoleLogger, getIP } from "../../actions/core/logger"; import { readFormXml } from "../forms/readFormXml"; import { requireQueryParams } from "../routing/requireQueryParams"; /** * Loads everything needed for New Appeal SSR. * Returns { redirect } on auth/query issues, otherwise returns a data object. */ export async function loadNewAppealPage(ctx) { const { query, req } = ctx; // Preserve existing behaviour getIP(req); // Validate required params early (adjust keys if needed) const required = requireQueryParams(query, ["appealtypes", "apt", "id"]); if (!required.ok) { return { redirect: required.redirect }; } const session = await getSession(ctx); if (!session) { consoleLogger({ name: "NewAppealLoaderAuthGuard", reasonCode: "NO_SESSION", message: "loadNewAppealPage missing session; redirecting to signin" }); return { redirect: { destination: "/auth/signin", permanent: false } }; } if (!session?.user?.id || !session?.user?.email) { consoleLogger({ name: "NewAppealLoaderAuthGuard", reasonCode: "NO_SESSION_USER", message: "loadNewAppealPage missing session user identity; redirecting to signin", hasSessionUserId: !!session?.user?.id, hasSessionUserEmail: !!session?.user?.email }); return { redirect: { destination: "/auth/signin", permanent: false } }; } const { cookies } = req; const loggedInUser = cookies?.pinsUser; // existing cookie usage const loggedInUserIdent = session.user.id; const loggedInUserEmail = session.user.email; if (!loggedInUser) { consoleLogger({ name: "NewAppealLoaderAuthGuard", reasonCode: "NO_PINSUSER_COOKIE", message: "loadNewAppealPage missing pinsUser cookie identity; redirecting to signin" }); return { redirect: { destination: "/auth/signin", permanent: false } }; } let appealTypeData; let mandatoryFieldsData; let pickListData; let blobProgress; let accountDetails; try { [ appealTypeData, mandatoryFieldsData, pickListData, blobProgress, accountDetails ] = await Promise.all([ getAppealsTypesForNewAppeal(), getMandatoryFields(query.appealtypes), getPickLists(query.appealtypes), getProgressFromBlob(loggedInUserIdent, query.id), getPersonalAccount(loggedInUser) ]); } catch (_error) { consoleLogger({ name: "NewAppealLoaderDependencyFailure", message: "loadNewAppealPage dependency fetch failed; redirecting to /myportal", appealType: query?.appealtypes, hasCaseId: !!query?.id, error: _error?.message }); return { redirect: { destination: "/myportal", permanent: false } }; } let xmlStr = ""; try { xmlStr = readFormXml(query.appealtypes).xmlStr; } catch (_error) { consoleLogger({ name: "NewAppealLoaderXmlReadFailure", message: "loadNewAppealPage XML read failed; redirecting to /myportal", appealType: query?.appealtypes, error: _error?.message }); return { redirect: { destination: "/myportal", permanent: false } }; } return { session, loggedInUser, loggedInUserIdent, loggedInUserEmail, appealTypeData, mandatoryFieldsData, pickListData, blobProgress, accountDetails, xmlStr }; }