espace-paie-odentas/app/api/professions-feminisations/route.ts
2025-10-12 17:05:46 +02:00

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