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 = ` ${pages.map((page) => ` ${settings.website.domainName}${page.url} ${page.lastModified.toISOString()} `).join('')} `; 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; }