Files
website/astro/src/pages/sitemap/albums-[page].xml.ts
itsfinniii d9430335d5 Clean up the project a bit
Fix imports, remove unnecessary imports, and replace all single apostrophe to double apostrophes
2026-04-27 21:15:32 +02:00

71 lines
1.9 KiB
TypeScript

import { getAllAlbums } from "@/content/photos/albums";
import { getSettings } from "@/content/settings/settings";
import { getAlbumRoute } from "@/lib/routing";
import type { APIRoute } from "astro";
import minifyXML from "minify-xml";
export const GET = (async ({ params }) => {
const settings = await getSettings();
if (!settings.photo.enabled) {
return new Response(null, {
status: 204,
statusText: "Not Found"
});
}
const currentPage = params.page;
const albums = await getAllAlbums(settings);
const selectedAlbums = albums.slice(
((Number(currentPage) - 1) * settings.sitemap.perPage),
Number(currentPage) * settings.sitemap.perPage - 1
);
let pages: SitemapPage[] = [];
selectedAlbums.forEach((album) => {
pages.push({
url: getAlbumRoute(settings.photo, album),
lastModified: album.lastModified
});
});
let sitemapContent = `
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${pages.map((page) => `
<sitemap>
<loc>${settings.website.domainName}${page.url}</loc>
<lastmod>${page.lastModified.toISOString()}</lastmod>
</sitemap>
`).join("")}
</sitemapindex>
`;
return new Response(minifyXML(sitemapContent), {
status: 200,
statusText: "OK",
headers: {
"Content-Type": "application/xml"
}
});
}) satisfies APIRoute;
export async function getStaticPaths() {
const settings = await getSettings();
const albums = await getAllAlbums(settings);
const albumCount = albums.length;
const perPage = settings.sitemap.perPage;
const pages = Math.ceil(albumCount / perPage);
let items: any[] = [];
for (let i = 0; i < pages; i++) {
items.push({ params: { page: (i + 1).toString() } });
}
return items;
}