Files
web/apps/scandic-web/app/sitemap/[sitemapId]/route.ts
Joakim Jäderberg dc53ab9245 Merged in chore/upgrade-next (pull request #3124)
Upgrade next@15.5.6

* chore: upgrade next@15.5.6

* chore: upgrade turborepo@2.6.1

* fix typings for scandic-web

* fix: set correct type for pages

* cleanup

* fix more route.ts typing issues

* Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/upgrade-next

* explicitly import the types


Approved-by: Linus Flood
2025-11-13 07:33:56 +00:00

52 lines
1.4 KiB
TypeScript

import { notFound } from "next/navigation"
import { createLogger } from "@scandic-hotels/common/logger/createLogger"
import { getSitemapDataById } from "@/utils/sitemap"
import type { NextRequest } from "next/server"
export const dynamic = "force-dynamic"
const sitemapLogger = createLogger("sitemap")
export async function GET(
_request: NextRequest,
context: RouteContext<"/sitemap/[sitemapId]">
) {
const params = await context.params
const sitemapId = params.sitemapId
sitemapLogger.debug("Fetching sitemap by ID", sitemapId)
if (!sitemapId) {
return notFound()
}
const sitemapData = await getSitemapDataById(Number(sitemapId))
if (!sitemapData.length) {
return notFound()
}
const entries = sitemapData.map((entry) => {
const alternates = Object.entries(entry.alternates).map(
([lang, url]) =>
`<xhtml:link rel="alternate" hreflang="${lang}" href="${url}" />`
)
return `
<url>
<loc>${entry.url}</loc>
<lastmod>${entry.lastModified}</lastmod>
<changefreq>${entry.changeFrequency}</changefreq>
<priority>${entry.priority}</priority>
${alternates.join("")}
</url>`
})
const sitemapXML = `<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">${entries.join("")}\n</urlset>`
return new Response(sitemapXML, {
headers: { "Content-Type": "application/xml" },
})
}