48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
// app/api/organizations/route.ts
|
|
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
|
|
import { cookies, headers } from "next/headers";
|
|
import { detectDemoModeFromHeaders } from "@/lib/demo-detector";
|
|
import { DEMO_ORGANIZATION } from "@/lib/demo-data";
|
|
|
|
export async function GET() {
|
|
// 🎭 Vérification du mode démo en premier
|
|
const h = headers();
|
|
const isDemoMode = detectDemoModeFromHeaders(h);
|
|
|
|
if (isDemoMode) {
|
|
console.log("🎭 [API ORGANIZATIONS] Mode démo détecté - renvoi de données fictives");
|
|
|
|
return Response.json({
|
|
items: [DEMO_ORGANIZATION]
|
|
});
|
|
}
|
|
|
|
try {
|
|
const supabase = createRouteHandlerClient({ cookies });
|
|
|
|
const {
|
|
data: { user },
|
|
error: userErr,
|
|
} = await supabase.auth.getUser();
|
|
if (userErr) {
|
|
console.error("supabase.getUser error:", userErr.message);
|
|
}
|
|
if (!user) return new Response("Unauthorized", { status: 401 });
|
|
|
|
// RLS appliquée automatiquement (policies can_access_org)
|
|
const { data, error } = await supabase
|
|
.from("organizations")
|
|
.select("id,name,structure_api")
|
|
.order("name", { ascending: true });
|
|
|
|
if (error) {
|
|
console.error("organizations select error:", error.message);
|
|
return new Response(error.message, { status: 400 });
|
|
}
|
|
|
|
return Response.json({ items: data ?? [] });
|
|
} catch (e: any) {
|
|
console.error("/api/organizations fatal:", e?.message || e);
|
|
return new Response("Internal Server Error", { status: 500 });
|
|
}
|
|
}
|