import Database from "better-sqlite3";
import grimm from "../../../app/grimm.js";
const db = new Database("./db/site.db");
db.pragma("journal_mode = DELETE");
const sqlQuery = `SELECT pagesets.pagesetID, pagesets.original, pagesets.pageCreated, editions.pageUpdated FROM pagesets INNER JOIN editions ON editions.editionID = pagesets.original WHERE NOT pagesetID like '%/%'`;
function comparePages(a, b) {
function localeSort(x) {
return grimm.dict?.[x]?.meta?.sort ?? x;
}
if (localeSort(a) < localeSort(b)) {
return -1;
}
if (localeSort(a) > localeSort(b)) {
return 1;
}
return 0;
}
let pages = null;
let lastGotPages = new Date();
const getPages = () => {
if (pages !== null && new Date() - lastGotPages < 7 * 24 * 60 * 60 * 1000) {
return pages;
}
lastGotPages = new Date();
pages = db
.prepare(sqlQuery)
.all()
.reduce((obj, row) => ({ ...obj, [row.pagesetID]: row }), {});
for (const pg in pages) {
let page = pages[pg];
const pgCreated = page.pageCreated
? page.pageCreated.slice(0, 4)
: null;
const pgUpdated = page.pageUpdated
? page.pageUpdated.slice(0, 4)
: null;
pages[pg].dateRange = !pgCreated
? ""
: !pgUpdated || pgCreated == pgUpdated
? pgCreated
: pgCreated.slice(0, 2) == pgUpdated.slice(0, 2)
? `${pgCreated}–${pgUpdated.slice(2)}`
: `${pgCreated}–${pgUpdated}`;
pages[pg].translations = db
.prepare("SELECT lang FROM editions WHERE translates = ?")
.all(pg)
.map(x => x.lang)
.sort(comparePages);
}
return pages;
};
export default getPages;