All checks were successful
Deploy / build-and-deploy (push) Successful in 1m14s
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { getServerSession } from "@/lib/auth";
|
|
import { readdir, unlink } from "fs/promises";
|
|
import path from "path";
|
|
|
|
const SOUNDS_DIR = path.join(process.cwd(), "public", "uploads", "sounds");
|
|
|
|
export async function GET() {
|
|
const session = await getServerSession();
|
|
if (!session || !session.isAdmin) {
|
|
return NextResponse.json({ error: "Forbidden" }, { status: 403 });
|
|
}
|
|
try {
|
|
const files = await readdir(SOUNDS_DIR);
|
|
const sounds = files
|
|
.filter(f => f.endsWith(".ogg"))
|
|
.map(f => ({ filename: f, url: `/uploads/sounds/${f}` }))
|
|
.sort((a, b) => a.filename.localeCompare(b.filename));
|
|
return NextResponse.json({ sounds });
|
|
} catch {
|
|
return NextResponse.json({ sounds: [] });
|
|
}
|
|
}
|
|
|
|
export async function DELETE(req: NextRequest) {
|
|
const session = await getServerSession();
|
|
if (!session || !session.isAdmin) {
|
|
return NextResponse.json({ error: "Forbidden" }, { status: 403 });
|
|
}
|
|
const filename = req.nextUrl.searchParams.get("filename");
|
|
if (!filename) return NextResponse.json({ error: "No filename" }, { status: 400 });
|
|
try {
|
|
const filepath = path.join(SOUNDS_DIR, filename);
|
|
await unlink(filepath);
|
|
return NextResponse.json({ success: true });
|
|
} catch {
|
|
return NextResponse.json({ error: "Delete failed" }, { status: 500 });
|
|
}
|
|
}
|