116 lines
2.9 KiB
TypeScript
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 }
|
|
);
|
|
}
|
|
}
|