139 lines
No EOL
4.7 KiB
TypeScript
139 lines
No EOL
4.7 KiB
TypeScript
// app/api/professions-feminisations/route.ts
|
|
import { NextRequest, NextResponse } from "next/server";
|
|
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
|
|
import { createClient } from "@supabase/supabase-js";
|
|
import { cookies } from "next/headers";
|
|
|
|
type ProfessionFeminisation = {
|
|
id?: string;
|
|
profession_code: string;
|
|
profession_label: string;
|
|
profession_feminine: string;
|
|
created_at?: string;
|
|
updated_at?: string;
|
|
};
|
|
|
|
// Client Supabase avec service role pour contourner RLS si nécessaire
|
|
function getServiceRoleClient() {
|
|
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!;
|
|
const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY!;
|
|
|
|
return createClient(supabaseUrl, supabaseServiceKey, {
|
|
auth: {
|
|
autoRefreshToken: false,
|
|
persistSession: false
|
|
}
|
|
});
|
|
}
|
|
|
|
// GET - Récupérer toutes les féminisations ou une spécifique
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const url = new URL(request.url);
|
|
const professionCode = url.searchParams.get('code');
|
|
|
|
// Utiliser le service role client pour la lecture car les féminisations doivent être accessibles à tous
|
|
const supabase = getServiceRoleClient();
|
|
|
|
if (professionCode) {
|
|
const { data: feminisation, error } = await supabase
|
|
.from('professions_feminisations')
|
|
.select('*')
|
|
.eq('profession_code', professionCode)
|
|
.maybeSingle();
|
|
|
|
if (error) {
|
|
console.error("Erreur lors de la récupération de la féminisation:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la récupération de la féminisation" }, { status: 500 });
|
|
}
|
|
|
|
// Retourner null explicitement si pas de féminisation trouvée
|
|
return NextResponse.json(feminisation || null);
|
|
}
|
|
|
|
const { data: feminisations, error } = await supabase
|
|
.from('professions_feminisations')
|
|
.select('*')
|
|
.order('profession_label');
|
|
|
|
if (error) {
|
|
console.error("Erreur lors de la récupération des féminisations:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la récupération des féminisations" }, { status: 500 });
|
|
}
|
|
|
|
return NextResponse.json(feminisations);
|
|
} catch (error) {
|
|
console.error("Erreur GET féminisations:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la récupération des féminisations" }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
// POST - Ajouter ou mettre à jour une féminisation
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body = await request.json();
|
|
const { profession_code, profession_label, profession_feminine } = body;
|
|
|
|
if (!profession_code || !profession_label || !profession_feminine) {
|
|
return NextResponse.json(
|
|
{ error: "Les champs profession_code, profession_label et profession_feminine sont requis" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Utiliser le client avec service role pour écrire
|
|
const supabase = getServiceRoleClient();
|
|
|
|
const { data: feminisation, error } = await supabase
|
|
.from('professions_feminisations')
|
|
.upsert({
|
|
profession_code,
|
|
profession_label,
|
|
profession_feminine: profession_feminine.trim()
|
|
}, {
|
|
onConflict: 'profession_code'
|
|
})
|
|
.select('*')
|
|
.single();
|
|
|
|
if (error) {
|
|
console.error("Erreur lors de la sauvegarde de la féminisation:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la sauvegarde de la féminisation" }, { status: 500 });
|
|
}
|
|
|
|
return NextResponse.json(feminisation);
|
|
} catch (error) {
|
|
console.error("Erreur POST féminisation:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la sauvegarde de la féminisation" }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
// DELETE - Supprimer une féminisation
|
|
export async function DELETE(request: NextRequest) {
|
|
try {
|
|
const url = new URL(request.url);
|
|
const professionCode = url.searchParams.get('code');
|
|
|
|
if (!professionCode) {
|
|
return NextResponse.json({ error: "Le code de profession est requis" }, { status: 400 });
|
|
}
|
|
|
|
// Utiliser le client avec service role pour supprimer
|
|
const supabase = getServiceRoleClient();
|
|
|
|
const { error } = await supabase
|
|
.from('professions_feminisations')
|
|
.delete()
|
|
.eq('profession_code', professionCode);
|
|
|
|
if (error) {
|
|
console.error("Erreur lors de la suppression de la féminisation:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la suppression de la féminisation" }, { status: 500 });
|
|
}
|
|
|
|
return NextResponse.json({ success: true });
|
|
} catch (error) {
|
|
console.error("Erreur DELETE féminisation:", error);
|
|
return NextResponse.json({ error: "Erreur lors de la suppression de la féminisation" }, { status: 500 });
|
|
}
|
|
} |