← 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 });
}
}