← back to Norma

app/api/gmail/mailboxes/route.ts

27 lines

import { NextRequest, NextResponse } from 'next/server';
import { query } from '@/lib/db';
import { requireRole } from '@/lib/require-role';

/**
 * GET /api/gmail/mailboxes
 * List all active mailboxes the current user can switch between in the Gmail CRM.
 */
export async function GET(request: NextRequest) {
  const auth = requireRole(request, 'admin', 'staff', 'pulse');
  if (auth instanceof NextResponse) return auth;

  try {
    const result = await query(
      `SELECT id, email, display_name, is_active, needs_reauth, last_synced_at,
              COALESCE((SELECT COUNT(*)::int FROM gmail_messages gm WHERE gm.mailbox_id = m.id AND NOT (gm.labels @> ARRAY['TRASH'])), 0) AS message_count
       FROM mailboxes m
       WHERE is_active = true
       ORDER BY email`,
    );
    return NextResponse.json({ mailboxes: result.rows });
  } catch (err) {
    console.error('[api/gmail/mailboxes] GET error:', (err as Error).message);
    return NextResponse.json({ error: 'Failed to load mailboxes', mailboxes: [] }, { status: 500 });
  }
}