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']; 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, }); } };