@paroicms/server
Version:
The ParoiCMS server
46 lines • 1.64 kB
JavaScript
import { ApiError } from "@paroicms/public-server-lib";
import { type } from "arktype";
export async function createPartNode(cn, { nodeId, listName, documentNodeId, isOrdered, lastOrderNum, }) {
await cn("PaPartNode").insert({ nodeId, listName, documentNodeId });
if (isOrdered) {
await cn("PaOrderedNode").insert({
nodeId,
orderNum: (lastOrderNum ?? 0) + 1,
});
}
}
const PartNodeShiftRowAT = type({
parentId: "number",
listName: "string",
orderNum: "number",
"+": "reject",
}).pipe((r) => ({
parentId: String(r.parentId),
listName: r.listName,
orderNum: r.orderNum,
}));
export async function shiftPartNodeOrdersAfterDeletion(cn, nodeId) {
const row = await cn("PaNode as n")
.select("n.parentId", "p.listName", "o.orderNum")
.innerJoin("PaPartNode as p", "p.nodeId", "n.id")
.innerJoin("PaOrderedNode as o", "o.nodeId", "n.id")
.where("n.id", nodeId)
.first();
if (!row)
throw new ApiError(`part-node '${nodeId}' not found`, 404);
const { parentId, listName, orderNum } = PartNodeShiftRowAT.assert(row);
await cn("PaOrderedNode")
.whereRaw("orderNum > ?", [orderNum])
.whereExists(function () {
this.select(1)
.from("PaNode as n")
.innerJoin("PaPartNode as p", "p.nodeId", "n.id")
.whereRaw("PaOrderedNode.nodeId = n.id")
.andWhere("n.parentId", parentId)
.andWhere("p.listName", listName);
})
.update({
orderNum: cn.raw("orderNum - 1"),
});
}
//# sourceMappingURL=part-node.queries.js.map