38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
// app/api/health/directus/route.ts
|
|
import { NextResponse } from "next/server";
|
|
import { directusFetch } from "@/lib/directus";
|
|
|
|
export const runtime = "nodejs";
|
|
|
|
export async function GET() {
|
|
const out: any = { ok: true, checks: {} };
|
|
try {
|
|
// who am I?
|
|
try {
|
|
const who = await directusFetch<{ data: any }>(`/users/me?fields=id,email,role.name`);
|
|
out.checks.user = { ok: true, role: who?.data?.role?.name ?? null };
|
|
} catch (e: any) {
|
|
out.checks.user = { ok: false, error: e?.message || String(e) };
|
|
}
|
|
|
|
// can read folders?
|
|
try {
|
|
const folders = await directusFetch<{ data: any[] }>(`/folders?limit=1&fields=id,name`);
|
|
out.checks.folders = { ok: true, sample: folders?.data?.[0] ?? null };
|
|
} catch (e: any) {
|
|
out.checks.folders = { ok: false, error: e?.message || String(e) };
|
|
}
|
|
|
|
// can read files (not create; safe)
|
|
try {
|
|
const files = await directusFetch<{ data: any[] }>(`/files?limit=0`);
|
|
out.checks.files_read = { ok: true, totalKnown: files?.data?.length ?? 0 };
|
|
} catch (e: any) {
|
|
out.checks.files_read = { ok: false, error: e?.message || String(e) };
|
|
}
|
|
|
|
return NextResponse.json(out);
|
|
} catch (e: any) {
|
|
return NextResponse.json({ ok: false, error: e?.message || "health error", ...out }, { status: 500 });
|
|
}
|
|
}
|