/** * Voxyz API Routes - Daily Missions * Handles daily mission CRUD operations and generation */ import { NextRequest, NextResponse } from 'next/server'; import { generateDailyMissions, getTodaysDailyMission, approveDailyMission, scheduleDailyMission, completeDailyMission, runDailyMissionGeneration } from '@/lib/services/daily-mission-agent'; import { getProposalsForDate, approveProposal, rejectProposal } from '@/lib/services/proposal.service'; import { getServiceSupabase } from '@/lib/supabase/client'; // GET /api/voxyz/daily-missions - Get today's daily mission export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); const date = searchParams.get('date'); if (date) { // Get proposals for specific date const proposals = await getProposalsForDate(new Date(date)); return NextResponse.json({ proposals }); } // Get today's daily mission const dailyMission = await getTodaysDailyMission(); if (!dailyMission) { return NextResponse.json({ dailyMission: null, message: 'No daily mission generated yet' }); } // Fetch full proposal details const supabase = getServiceSupabase(); const proposalIds = [ dailyMission.primary_mission_id, dailyMission.secondary_mission_id, dailyMission.tertiary_mission_id, ].filter(Boolean); const { data: proposals } = await supabase .from('ops_mission_proposals') .select('*') .in('id', proposalIds); return NextResponse.json({ dailyMission, proposals: proposals || [], }); } catch (error) { console.error('Error fetching daily mission:', error); return NextResponse.json( { error: 'Failed to fetch daily mission' }, { status: 500 } ); } } // POST /api/voxyz/daily-missions - Generate daily missions export async function POST(request: NextRequest) { try { const body = await request.json(); const { date, force = false } = body; const targetDate = date ? new Date(date) : new Date(); const result = await generateDailyMissions({ date: targetDate, targetMissionCount: 3, includeReactions: true, forceRegenerate: force, }); if (!result) { return NextResponse.json( { error: 'Failed to generate daily missions' }, { status: 500 } ); } return NextResponse.json(result, { status: 201 }); } catch (error) { console.error('Error generating daily missions:', error); return NextResponse.json( { error: 'Failed to generate daily missions' }, { status: 500 } ); } } // PATCH /api/voxyz/daily-missions - Update daily mission status export async function PATCH(request: NextRequest) { try { const body = await request.json(); const { id, action, rating, notes } = body; if (!id || !action) { return NextResponse.json( { error: 'Missing required fields: id, action' }, { status: 400 } ); } let success = false; switch (action) { case 'approve': success = await approveDailyMission(id); break; case 'schedule': success = await scheduleDailyMission(id); break; case 'complete': success = await completeDailyMission(id, rating, notes); break; default: return NextResponse.json( { error: `Unknown action: ${action}` }, { status: 400 } ); } if (!success) { return NextResponse.json( { error: `Failed to ${action} daily mission` }, { status: 500 } ); } return NextResponse.json({ success: true }); } catch (error) { console.error('Error updating daily mission:', error); return NextResponse.json( { error: 'Failed to update daily mission' }, { status: 500 } ); } }