Nyk
feat: upgrade local-mode virtual office and flight deck integration
ab90450
Raw
History Blame Contribute Delete
1.31 kB
import { NextRequest, NextResponse } from 'next/server'
import { requireRole } from '@/lib/auth'
import { getSchedulerStatus, triggerTask } from '@/lib/scheduler'
/**
* GET /api/scheduler - Get scheduler status
*/
export async function GET(request: NextRequest) {
const auth = requireRole(request, 'admin')
if ('error' in auth) return NextResponse.json({ error: auth.error }, { status: auth.status })
return NextResponse.json({ tasks: getSchedulerStatus() })
}
/**
* POST /api/scheduler - Manually trigger a scheduled task
* Body: { task_id: 'auto_backup' | 'auto_cleanup' | 'agent_heartbeat' }
*/
export async function POST(request: NextRequest) {
const auth = requireRole(request, 'admin')
if ('error' in auth) return NextResponse.json({ error: auth.error }, { status: auth.status })
const body = await request.json().catch(() => ({}))
const taskId = typeof body?.task_id === 'string' ? body.task_id : ''
const allowedTaskIds = new Set(getSchedulerStatus().map((task) => task.id))
if (!taskId || !allowedTaskIds.has(taskId)) {
return NextResponse.json({
error: `task_id required: ${Array.from(allowedTaskIds).join(', ')}`,
}, { status: 400 })
}
const result = await triggerTask(taskId)
return NextResponse.json(result, { status: result.ok ? 200 : 500 })
}