import { NextRequest, NextResponse } from 'next/server'; import { db } from '@/lib/db'; import { announcements } from '@/lib/db/schema'; import { eq, desc } from 'drizzle-orm'; import { getSession } from '@/lib/session'; export async function GET(request: NextRequest) { try { const session = await getSession(); if (!session) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } // Regular users see only active announcements, admins see all const allAnnouncements = await db .select() .from(announcements) .where(session.role === 'admin' ? undefined : eq(announcements.isActive, true)) .orderBy(desc(announcements.createdAt)); return NextResponse.json({ announcements: allAnnouncements }); } catch (error) { console.error('Error fetching announcements:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function POST(request: NextRequest) { try { const session = await getSession(); if (!session || session.role !== 'admin') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const { title, content, priority, expiresAt } = await request.json(); if (!title || !content) { return NextResponse.json({ error: 'Title and content are required' }, { status: 400 }); } const [newAnnouncement] = await db .insert(announcements) .values({ id: crypto.randomUUID(), title, content, priority: priority || 'medium', expiresAt: expiresAt ? new Date(expiresAt) : null, isActive: true, createdAt: new Date(), updatedAt: new Date(), }) .returning(); return NextResponse.json({ announcement: newAnnouncement, message: 'Announcement created successfully', }); } catch (error) { console.error('Error creating announcement:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }