{"path":"src/app/api/admin/admins/route.ts","size":2795,"locked":false,"binary":false,"truncated":false,"content":"import { createClient } from \"@/lib/supabase/server\";\nimport { supabaseAdmin } from \"@/lib/supabase/admin\";\nimport { NextResponse } from \"next/server\";\n\nexport const dynamic = \"force-dynamic\";\n\nexport async function GET() {\n  if (!supabaseAdmin) {\n    return NextResponse.json({ error: \"Database not connected\" }, { status: 503 });\n  }\n\n  const supabase = await createClient();\n  if (!supabase) return NextResponse.json({ error: \"Database not connected\" }, { status: 503 });\n\n  const { data: { user } } = await supabase.auth.getUser();\n  if (!user) return NextResponse.json({ error: \"Unauthorized\" }, { status: 401 });\n\n  // Fetch admins (no join – reliable)\n  const { data: admins, error } = await supabaseAdmin\n    .from(\"admin_users\")\n    .select(\"user_id, created_at\")\n    .order(\"created_at\", { ascending: true });\n\n  if (error) {\n    return NextResponse.json({ error: error.message }, { status: 500 });\n  }\n\n  const isFirstAdmin = admins && admins.length > 0\n    ? admins[0].user_id === user.id\n    : true;\n\n  return NextResponse.json({\n    admins: admins || [],\n    currentUserId: user.id,\n    isFirstAdmin,\n  });\n}\n\nexport async function POST(request: Request) {\n  if (!supabaseAdmin) {\n    return NextResponse.json({ error: \"Database not connected\" }, { status: 503 });\n  }\n\n  const supabase = await createClient();\n  if (!supabase) return NextResponse.json({ error: \"Database not connected\" }, { status: 503 });\n\n  const { data: { user } } = await supabase.auth.getUser();\n  if (!user) return NextResponse.json({ error: \"Unauthorized\" }, { status: 401 });\n\n  const { data: admins } = await supabaseAdmin\n    .from(\"admin_users\")\n    .select(\"user_id, created_at\")\n    .order(\"created_at\", { ascending: true });\n\n  const isFirstAdmin = admins && admins.length > 0\n    ? admins[0].user_id === user.id\n    : true;\n\n  if (!isFirstAdmin) {\n    return NextResponse.json({ error: \"Only the first admin can promote others\" }, { status: 403 });\n  }\n\n  const { email } = await request.json();\n  if (!email) return NextResponse.json({ error: \"Email is required\" }, { status: 400 });\n\n  const { data: { users }, error: userError } = await supabaseAdmin.auth.admin.listUsers();\n\n  if (userError) {\n    return NextResponse.json({ error: \"Failed to list users\" }, { status: 500 });\n  }\n\n  const targetUser = users?.find((u: any) => u.email === email);\n\n  if (!targetUser) {\n    return NextResponse.json({ error: \"User with that email not found. Have they signed up?\" }, { status: 404 });\n  }\n\n  const { error: insertError } = await supabaseAdmin\n    .from(\"admin_users\")\n    .upsert({ user_id: targetUser.id }, { onConflict: \"user_id\" });\n\n  if (insertError) {\n    return NextResponse.json({ error: insertError.message }, { status: 500 });\n  }\n\n  return NextResponse.json({ success: true });\n    }\n"}