refactor: merge api/recipes and api/rezepte into unified recipeLang route
Consolidate duplicate recipe API routes into a single api/[recipeLang=recipeLang]/ structure. Both /api/recipes/ and /api/rezepte/ URLs continue to work via the param matcher. Shared read endpoints now serve both languages with caching for both. Also: remove dead code (5 unused components, cookie.js) and the redundant cron-execute recurring payment route.
This commit is contained in:
59
src/routes/api/[recipeLang=recipeLang]/edit/+server.ts
Normal file
59
src/routes/api/[recipeLang=recipeLang]/edit/+server.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import type { RequestHandler } from '@sveltejs/kit';
|
||||
import { Recipe } from '$models/Recipe';
|
||||
import { dbConnect } from '$utils/db';
|
||||
import type {RecipeModelType} from '$types/types';
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { rename } from 'fs/promises';
|
||||
import { join } from 'path';
|
||||
import { existsSync } from 'fs';
|
||||
import { invalidateRecipeCaches } from '$lib/server/cache';
|
||||
|
||||
// header: use for bearer token for now
|
||||
// recipe json in body
|
||||
export const POST: RequestHandler = async ({request, locals}) => {
|
||||
let message = await request.json()
|
||||
const recipe_json = message.recipe
|
||||
const auth = await locals.auth();
|
||||
if(!auth){
|
||||
throw error(403, "Not logged in")
|
||||
}
|
||||
else{
|
||||
await dbConnect();
|
||||
|
||||
// Check if short_name has changed
|
||||
const oldShortName = message.old_short_name;
|
||||
const newShortName = recipe_json.short_name;
|
||||
|
||||
if (oldShortName !== newShortName) {
|
||||
// Rename image files in all three directories
|
||||
const imageDirectories = ['full', 'thumb', 'placeholder'];
|
||||
const staticPath = join(process.cwd(), 'static', 'rezepte');
|
||||
|
||||
for (const dir of imageDirectories) {
|
||||
const oldPath = join(staticPath, dir, `${oldShortName}.webp`);
|
||||
const newPath = join(staticPath, dir, `${newShortName}.webp`);
|
||||
|
||||
// Only rename if the old file exists
|
||||
if (existsSync(oldPath)) {
|
||||
try {
|
||||
await rename(oldPath, newPath);
|
||||
console.log(`Renamed ${dir}/${oldShortName}.webp -> ${dir}/${newShortName}.webp`);
|
||||
} catch (err) {
|
||||
console.error(`Failed to rename ${dir}/${oldShortName}.webp:`, err);
|
||||
// Continue with other files even if one fails
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await Recipe.findOneAndUpdate({short_name: message.old_short_name }, recipe_json);
|
||||
|
||||
// Invalidate recipe caches after successful update
|
||||
await invalidateRecipeCaches();
|
||||
|
||||
return new Response(JSON.stringify({msg: "Edited recipe successfully"}),{
|
||||
status: 200,
|
||||
});
|
||||
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user