101 lines
3.1 KiB
TypeScript
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 });
|
|
}
|
|
}
|