letsbe-hub-dashboard/src/app/api/calendar/events/route.ts

72 lines
1.9 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'
import { getEvents, createEvent } from '@/lib/caldav-client'
export async function GET(request: NextRequest) {
const session = await auth()
if (!session?.user || !session.accessToken) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const { searchParams } = request.nextUrl
const start = searchParams.get('start')
const end = searchParams.get('end')
const calendarId = searchParams.get('calendarId') || undefined
if (!start || !end) {
return NextResponse.json(
{ error: 'start and end query parameters are required' },
{ status: 400 }
)
}
try {
const events = await getEvents(session.accessToken, start, end, calendarId)
return NextResponse.json(events)
} catch (error) {
console.error('Failed to fetch events:', error)
return NextResponse.json(
{ error: 'Failed to fetch events' },
{ status: 500 }
)
}
}
export async function POST(request: NextRequest) {
const session = await auth()
if (!session?.user || !session.accessToken) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
try {
const body = await request.json()
const { title, start, end, allDay, location, description, calendarUrl, recurrence } = body
if (!title || !start || !end || !calendarUrl) {
return NextResponse.json(
{ error: 'title, start, end, and calendarUrl are required' },
{ status: 400 }
)
}
const event = await createEvent(session.accessToken, {
title,
start,
end,
allDay,
location,
description,
calendarUrl,
recurrence,
})
return NextResponse.json(event, { status: 201 })
} catch (error) {
console.error('Failed to create event:', error)
return NextResponse.json(
{ error: 'Failed to create event' },
{ status: 500 }
)
}
}