letsbe-hub-dashboard/src/app/api/tasks/route.ts

46 lines
1.6 KiB
TypeScript
Raw Normal View History

import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'
import { getAllTasks, createTask } from '@/lib/vikunja-client'
export async function GET(request: NextRequest) {
const session = await auth()
if (!session?.user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
try {
const { searchParams } = request.nextUrl
const tasks = await getAllTasks({
page: searchParams.get('page') ? parseInt(searchParams.get('page')!, 10) : undefined,
per_page: searchParams.get('per_page') ? parseInt(searchParams.get('per_page')!, 10) : 50,
sort_by: searchParams.get('sort_by') || undefined,
order_by: searchParams.get('order_by') || undefined,
filter: searchParams.get('filter') || undefined,
})
return NextResponse.json(tasks)
} catch (error) {
const message = error instanceof Error ? error.message : 'Failed to fetch tasks'
return NextResponse.json({ error: message }, { status: 502 })
}
}
export async function POST(request: Request) {
const session = await auth()
if (!session?.user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
try {
const body = await request.json()
const { projectId, ...taskData } = body
if (!projectId) {
return NextResponse.json({ error: 'projectId is required' }, { status: 400 })
}
const task = await createTask(projectId, taskData)
return NextResponse.json(task, { status: 201 })
} catch (error) {
const message = error instanceof Error ? error.message : 'Failed to create task'
return NextResponse.json({ error: message }, { status: 502 })
}
}