import { NextRequest, NextResponse } from 'next/server'; import { db } from '@/lib/db'; import { settings } from '@/lib/db/schema'; import { eq } from 'drizzle-orm'; import { getSession } from '@/lib/session'; export async function GET(request: NextRequest) { try { const session = await getSession(); if (!session || session.role !== 'admin') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const allSettings = await db.select().from(settings); // Convert to key-value object for easier use const settingsObj = allSettings.reduce((acc: any, setting) => { acc[setting.key] = setting.value; return acc; }, {}); return NextResponse.json({ settings: allSettings }); } catch (error) { console.error('Error fetching settings:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function PUT(request: NextRequest) { try { const session = await getSession(); if (!session || session.role !== 'admin') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const { settings: newSettings } = await request.json(); if (!newSettings || !Array.isArray(newSettings)) { return NextResponse.json( { error: 'Invalid settings format. Expected array of {key, value} objects' }, { status: 400 } ); } // Update each setting const updatePromises = newSettings.map(async ({ key, value }) => { if (!key || value === undefined) { return; } // Try to update existing setting first const result = await db .update(settings) .set({ value: String(value), updatedAt: new Date(), }) .where(eq(settings.key, key)); // If no rows were updated, insert new setting if (!result.changes) { await db.insert(settings).values({ id: crypto.randomUUID(), key, value: String(value), updatedAt: new Date(), }); } }); await Promise.all(updatePromises); return NextResponse.json({ message: 'Settings updated successfully' }); } catch (error) { console.error('Error updating settings:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }