fix(admin): key tunnels by user_id, server-side initial list load, full-scan user search
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { NextResponse, type NextRequest } from 'next/server';
|
||||
import { requireAdminApi } from '@/lib/auth/admin-guard';
|
||||
import { getSupabaseAdmin } from '@/lib/supabase/admin';
|
||||
import { parsePageParam, parsePerPageParam } from '@/lib/admin/validators';
|
||||
import { getAuditList } from '@/lib/admin/list';
|
||||
|
||||
export const runtime = 'nodejs';
|
||||
export const dynamic = 'force-dynamic';
|
||||
@@ -13,33 +13,18 @@ export async function GET(req: NextRequest) {
|
||||
const url = new URL(req.url);
|
||||
const page = parsePageParam(url.searchParams.get('page'), 1);
|
||||
const perPage = parsePerPageParam(url.searchParams.get('perPage'), 50, 100);
|
||||
const action = (url.searchParams.get('action') ?? '').trim();
|
||||
const targetType = (url.searchParams.get('target_type') ?? '').trim();
|
||||
const action = url.searchParams.get('action') ?? '';
|
||||
const targetType = url.searchParams.get('target_type') ?? '';
|
||||
|
||||
const admin = getSupabaseAdmin();
|
||||
|
||||
let query = admin
|
||||
.from('admin_audit_log')
|
||||
.select(
|
||||
'id, actor_id, actor_email, action, target_type, target_id, details, created_at',
|
||||
{ count: 'exact' },
|
||||
);
|
||||
if (action) query = query.eq('action', action);
|
||||
if (targetType) query = query.eq('target_type', targetType);
|
||||
|
||||
const from = (page - 1) * perPage;
|
||||
const to = from + perPage - 1;
|
||||
query = query.order('created_at', { ascending: false }).range(from, to);
|
||||
|
||||
const { data, error, count } = await query;
|
||||
if (error) {
|
||||
return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
try {
|
||||
const { entries, total } = await getAuditList({
|
||||
page,
|
||||
perPage,
|
||||
action,
|
||||
targetType,
|
||||
});
|
||||
return NextResponse.json({ entries, total, page, perPage });
|
||||
} catch (e) {
|
||||
return NextResponse.json({ error: (e as Error).message }, { status: 500 });
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
entries: data ?? [],
|
||||
total: count ?? (data?.length ?? 0),
|
||||
page,
|
||||
perPage,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user