Files
markdownblog/src/app/api/admin/delete/route.ts
rattatwinko b82f48ef4f yes
2025-06-16 19:43:23 +02:00

116 lines
2.9 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import fs from 'fs/promises';
import path from 'path';
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const { path: itemPath, name, type } = body;
if (!name || !type) {
return NextResponse.json(
{ error: 'Missing required parameters' },
{ status: 400 }
);
}
// Construct the full path to the item
const basePath = process.cwd();
const postsDir = path.join(basePath, 'posts');
// Ensure the posts directory exists
try {
await fs.access(postsDir);
} catch {
return NextResponse.json({ error: 'Posts directory not found' }, { status: 404 });
}
// Construct the full path to the item
let fullPath: string;
if (type === 'post') {
// For posts, we need to handle the .md extension
if (itemPath) {
fullPath = path.join(postsDir, itemPath, `${name}.md`);
} else {
fullPath = path.join(postsDir, `${name}.md`);
}
} else {
// For folders, we don't add the .md extension
if (itemPath) {
fullPath = path.join(postsDir, itemPath, name);
} else {
fullPath = path.join(postsDir, name);
}
}
console.log('Attempting to delete:', {
basePath,
postsDir,
fullPath,
itemPath,
name,
type
});
// Check if the item exists
try {
await fs.access(fullPath);
} catch (error) {
console.error('Item not found:', fullPath);
return NextResponse.json({
error: 'Item not found',
details: {
path: fullPath,
itemPath,
name,
type
}
}, { status: 404 });
}
// For folders, check if it's empty
if (type === 'folder') {
try {
const files = await fs.readdir(fullPath);
if (files.length > 0) {
return NextResponse.json(
{ error: 'Cannot delete non-empty folder' },
{ status: 400 }
);
}
} catch (error) {
console.error('Error checking folder contents:', error);
return NextResponse.json(
{ error: 'Error checking folder contents' },
{ status: 500 }
);
}
}
// Delete the item
try {
await fs.rm(fullPath, { recursive: true, force: true });
return NextResponse.json({
success: true,
deleted: {
path: fullPath,
itemPath,
name,
type
}
});
} catch (error) {
console.error('Error deleting item:', error);
return NextResponse.json(
{ error: 'Error deleting item' },
{ status: 500 }
);
}
} catch (error) {
console.error('Error processing delete request:', error);
return NextResponse.json(
{ error: 'Internal server error' },
{ status: 500 }
);
}
}