@paroicms/server
Version:
The ParoiCMS server
68 lines • 2.53 kB
JavaScript
import { formatDocValues } from "../../rendering-payload/doc-values.queries.js";
export async function fetchRawDocPayload(siteContext, parsedRoute) {
const query = buildRawDocPayloadQuery(siteContext, parsedRoute);
const rows = await query;
if (!rows || rows.length === 0)
return;
return formatDocValues(rows[0], {
language: parsedRoute.language,
});
}
function buildRawDocPayloadQuery(siteContext, parsedRoute) {
const { cn } = siteContext;
let query = cn("PaNode as l0")
.innerJoin("PaLNode as s0", {
"l0.id": "s0.nodeId",
"s0.language": cn.raw("?", [parsedRoute.language]),
})
.where("l0.id", siteContext.homeRoutingCluster.nodeId)
.whereRaw("l0.publishDate <= current_timestamp")
.where("s0.ready", 1);
let prev = 0;
for (const document of parsedRoute.documentHierarchy.slice(1)) {
const cur = prev + 1;
if (document.entryKind === "routing") {
query = query.innerJoin(`PaNode as l${cur}`, {
[`l${prev}.id`]: `l${cur}.parentId`,
[`l${cur}.typeName`]: cn.raw("?", [document.documentType.typeName]),
});
}
else {
query = query
.innerJoin(`PaNode as l${cur}`, {
[`l${prev}.id`]: `l${cur}.parentId`,
[`l${cur}.relativeId`]: cn.raw("?", [document.relativeId]),
})
.whereIn(`l${cur}.typeName`, document.candidateTypes.map((t) => t.typeName));
}
query = query
.innerJoin(`PaLNode as s${cur}`, {
[`l${cur}.id`]: `s${cur}.nodeId`,
[`s${cur}.language`]: cn.raw("?", [parsedRoute.language]),
})
.whereRaw(`l${cur}.publishDate <= current_timestamp`)
.where(`s${cur}.ready`, 1);
prev = cur;
}
query = query.select([
`l${prev}.typeName as typeName`,
`l${prev}.id as nodeId`,
`l${prev}.relativeId as relativeId`,
`l${prev}.publishDate as publishDate`,
]);
if (!parsedRoute.redirectTo) {
query = query
.select([
"d.title as title",
"d.slug as slug",
"d.metaDescription as metaDescription",
"d.metaKeywords as metaKeywords",
])
.innerJoin("PaDocument as d", {
[`l${prev}.id`]: "d.nodeId",
[`s${prev}.language`]: "d.language",
});
}
return query;
}
//# sourceMappingURL=raw-document-payload.js.map