46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
|
|
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 })
|
||
|
|
}
|
||
|
|
}
|