feat: menu visibility toggle + drag-and-drop reorder in admin
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { requireRole } from '@/lib/auth';
|
||||
import { db } from '@/lib/db';
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
await requireRole('admin');
|
||||
const body = await request.json();
|
||||
const { order } = body;
|
||||
|
||||
if (!Array.isArray(order) || order.length === 0) {
|
||||
return NextResponse.json({ error: 'Missing or invalid order array' }, { status: 400 });
|
||||
}
|
||||
|
||||
// Each entry: { id: number, sort_order: number }
|
||||
const updates = order.map((item: { id: number; sort_order: number }, index: number) =>
|
||||
db.query(
|
||||
'UPDATE menu_items SET sort_order = $1 WHERE id = $2',
|
||||
[index, item.id]
|
||||
)
|
||||
);
|
||||
|
||||
await Promise.all(updates);
|
||||
|
||||
return NextResponse.json({ ok: true });
|
||||
} catch (error: any) {
|
||||
console.error('POST /api/menu/reorder error:', error);
|
||||
return NextResponse.json({ error: error.message || 'Failed to reorder menu items' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user