← back to Hub

app/api/sdcc/detail/route.ts

59 lines

import { NextRequest, NextResponse } from 'next/server';
import { verifyAuth } from '@/lib/auth';
import { query } from '@/lib/db';

export const dynamic = 'force-dynamic';

export async function GET(request: NextRequest) {
  const user = verifyAuth(request);
  if (!user) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  try {
    const [
      totalDrafts,
      draftsByStatus,
      newsCount,
      petitionCount,
      collabCount,
      partnerCount,
      leadCount,
      libraryCount,
      recentDrafts,
    ] = await Promise.all([
      query('sdcc', 'SELECT COUNT(*) as count FROM drafts'),
      query('sdcc', 'SELECT status, COUNT(*) as count FROM drafts GROUP BY status ORDER BY count DESC'),
      query('sdcc', 'SELECT COUNT(*) as count FROM news_items'),
      query('sdcc', 'SELECT COUNT(*) as count FROM petitions'),
      query('sdcc', 'SELECT COUNT(*) as count FROM collaborations'),
      query('sdcc', 'SELECT COUNT(*) as count FROM partners'),
      query('sdcc', 'SELECT COUNT(*) as count FROM old_leads'),
      query('sdcc', 'SELECT COUNT(*) as count FROM library_items'),
      query('sdcc', 'SELECT id, subject, lane, status, created_at FROM drafts ORDER BY created_at DESC LIMIT 5'),
    ]);

    const byStatus: Record<string, number> = {};
    for (const row of draftsByStatus.rows) {
      byStatus[row.status] = parseInt(row.count);
    }

    return NextResponse.json({
      drafts: {
        total: parseInt(totalDrafts.rows[0].count),
        byStatus,
      },
      news: parseInt(newsCount.rows[0].count),
      petitions: parseInt(petitionCount.rows[0].count),
      collaborations: parseInt(collabCount.rows[0].count),
      partners: parseInt(partnerCount.rows[0].count),
      leads: parseInt(leadCount.rows[0].count),
      library: parseInt(libraryCount.rows[0].count),
      recentDrafts: recentDrafts.rows,
    });
  } catch (err) {
    console.error('[sdcc/detail] Error:', (err as Error).message);
    return NextResponse.json({ error: 'Failed to fetch SDCC data' }, { status: 500 });
  }
}