espace-paie-odentas/app/api/staff/contrats/[id]/employee-email/route.ts
2025-10-22 11:00:44 +02:00

101 lines
3.1 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs';
import { cookies } from 'next/headers';
// GET /api/staff/contrats/[id]/employee-email
// Récupère l'email du salarié pour un contrat
export async function GET(
req: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const contractId = params.id;
if (!contractId) {
return NextResponse.json({ error: 'Contract ID manquant' }, { status: 400 });
}
// Vérification de l'authentification
const sb = createRouteHandlerClient({ cookies });
const { data: { user } } = await sb.auth.getUser();
if (!user) {
return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });
}
// Vérifier staff pour lire la cible via cookie active_org_id
let isStaff = false;
try {
const { data } = await sb.from('staff_users').select('is_staff').eq('user_id', user.id).maybeSingle();
isStaff = !!data?.is_staff;
} catch {}
let orgId: string | null = null;
try {
if (isStaff) {
const c = cookies();
orgId = c.get('active_org_id')?.value || null;
} else {
const { data, error } = await sb
.from('organization_members')
.select('org_id')
.eq('user_id', user.id)
.single();
if (error || !data?.org_id) {
return NextResponse.json({ error: 'Aucune organisation active' }, { status: 403 });
}
orgId = data.org_id;
}
} catch {}
// Récupération des données du contrat depuis Supabase (cddu_contracts)
let query = sb
.from('cddu_contracts')
.select(`
id,
employee_matricule,
org_id
`)
.eq('id', contractId);
if (orgId) {
query = query.eq('org_id', orgId);
}
const { data: contract, error: contractError } = await query.single();
if (contractError || !contract) {
console.error('Erreur récupération contrat:', contractError);
return NextResponse.json({ error: 'Contrat non trouvé' }, { status: 404 });
}
// Récupérer l'email du salarié depuis salaries.adresse_mail
let employee_email: string | null = null;
if (contract.employee_matricule) {
try {
let salQ = sb
.from('salaries')
.select('adresse_mail')
.or(`code_salarie.eq.${contract.employee_matricule},num_salarie.eq.${contract.employee_matricule}`)
.limit(1);
if (orgId) salQ = salQ.eq('employer_id', orgId);
const { data: salData, error: salErr } = await salQ;
if (!salErr && salData && salData[0]?.adresse_mail) {
employee_email = salData[0].adresse_mail as string;
}
} catch (e) {
console.warn('Impossible de récupérer adresse_mail depuis salaries:', e);
}
}
return NextResponse.json({
employee_email: employee_email || null
});
} catch (error: any) {
console.error('Erreur:', error);
return NextResponse.json({
error: 'Erreur lors de la récupération de l\'email',
message: error.message
}, { status: 500 });
}
}