import { NextRequest, NextResponse } from 'next/server'; import { WithId, Document } from 'mongodb'; import { getDb, APPOINTMENTS_COLLECTION } from '@/lib/db'; import { Appointment, AppointmentPayload } from '@/types/appointment'; // Wandelt ein MongoDB-Dokument in das vom Frontend erwartete Format um // (_id -> id als String, termin als ISO-String). function normalize(doc: WithId): Appointment { return { id: doc._id.toString(), arztName: doc.arztName, arztArt: doc.arztArt ?? '', termin: new Date(doc.termin).toISOString(), erledigt: Boolean(doc.erledigt), bemerkungen: doc.bemerkungen ?? '', }; } // GET /api/appointments - Alle nicht gelöschten Termine abrufen export async function GET() { try { const db = await getDb(); const docs = await db .collection(APPOINTMENTS_COLLECTION) .find({ deleted: { $ne: true } }) .sort({ termin: 1 }) .toArray(); return NextResponse.json( { success: true, data: docs.map(normalize) }, { headers: { 'Cache-Control': 'no-store, no-cache, must-revalidate', Pragma: 'no-cache', Expires: '0', }, } ); } catch (error) { console.error('Fehler beim Abrufen der Termine:', error); return NextResponse.json( { success: false, error: 'Fehler beim Abrufen der Termine' }, { status: 500 } ); } } // POST /api/appointments - Neuen Termin erstellen export async function POST(request: NextRequest) { try { const body: AppointmentPayload = await request.json(); if (!body.arztName || !body.termin) { return NextResponse.json( { success: false, error: 'Arztname und Termin sind erforderlich.' }, { status: 400 } ); } const db = await getDb(); const doc = { arztName: body.arztName, arztArt: body.arztArt ?? '', termin: new Date(body.termin), erledigt: Boolean(body.erledigt), bemerkungen: body.bemerkungen ?? '', deleted: false, }; const result = await db.collection(APPOINTMENTS_COLLECTION).insertOne(doc); return NextResponse.json( { success: true, data: normalize({ _id: result.insertedId, ...doc }) }, { status: 201 } ); } catch (error) { console.error('Fehler beim Erstellen des Termins:', error); return NextResponse.json( { success: false, error: 'Fehler beim Speichern des Termins' }, { status: 500 } ); } }