feat/SW-550 sitemap route
* feat(SW-550): Added rewrites to handle sitemap paths * feat(SW-550): Added sitemap-index generation * feat(SW-550): Added sitemap xml file generation * feat(SW-550): Added feature flag 'HIDE_FOR_NEXT_RELEASE' to sitemap routes Approved-by: Linus Flood
This commit is contained in:
50
apps/scandic-web/app/sitemap/[sitemapId]/route.ts
Normal file
50
apps/scandic-web/app/sitemap/[sitemapId]/route.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { notFound } from "next/navigation"
|
||||
|
||||
import { env } from "@/env/server"
|
||||
|
||||
import { getSitemapDataById } from "@/utils/sitemap"
|
||||
|
||||
import type { NextRequest } from "next/server"
|
||||
|
||||
export const dynamic = "force-dynamic"
|
||||
|
||||
export async function GET(
|
||||
_request: NextRequest,
|
||||
context: { params: { sitemapId: string } }
|
||||
) {
|
||||
if (env.HIDE_FOR_NEXT_RELEASE) {
|
||||
notFound()
|
||||
}
|
||||
|
||||
const sitemapId = context.params.sitemapId
|
||||
if (!sitemapId) {
|
||||
notFound()
|
||||
}
|
||||
|
||||
const sitemapData = await getSitemapDataById(Number(sitemapId))
|
||||
if (!sitemapData.length) {
|
||||
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": "text/xml" },
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user