Some checks failed
CI / update (push) Failing after 59s
- Create recipeJsonLd.ts function with Schema.org compliant Recipe markup - Add API endpoint at /api/rezepte/json-ld/[name] for on-demand generation - Include proper ISO 8601 time parsing for German formats - Add rel="alternate" link in recipe pages for discoverability - Set author to Alexander Bocken with proper Person type - Include caching headers for performance optimization 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
import { json, type RequestHandler } from '@sveltejs/kit';
|
|
import { Recipe } from '../../../../../models/Recipe';
|
|
import { dbConnect, dbDisconnect } from '../../../../../utils/db';
|
|
import { generateRecipeJsonLd } from '$lib/js/recipeJsonLd';
|
|
import type { RecipeModelType } from '../../../../../types/types';
|
|
import { error } from '@sveltejs/kit';
|
|
|
|
export const GET: RequestHandler = async ({ params, setHeaders }) => {
|
|
await dbConnect();
|
|
let recipe = (await Recipe.findOne({ short_name: params.name }).lean()) as RecipeModelType;
|
|
await dbDisconnect();
|
|
|
|
recipe = JSON.parse(JSON.stringify(recipe));
|
|
if (recipe == null) {
|
|
throw error(404, "Recipe not found");
|
|
}
|
|
|
|
const jsonLd = generateRecipeJsonLd(recipe);
|
|
|
|
// Set appropriate headers for JSON-LD
|
|
setHeaders({
|
|
'Content-Type': 'application/ld+json',
|
|
'Cache-Control': 'public, max-age=3600' // Cache for 1 hour
|
|
});
|
|
|
|
return new Response(JSON.stringify(jsonLd, null, 2), {
|
|
headers: {
|
|
'Content-Type': 'application/ld+json',
|
|
'Cache-Control': 'public, max-age=3600'
|
|
}
|
|
});
|
|
}; |