espace-paie-odentas/app/api/signature-salarie/verify-birthdate/route.ts

139 lines
4.3 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { createSbServiceRole } from '@/lib/supabaseServer';
/**
* POST /api/signature-salarie/verify-birthdate
*
* Vérifie la date de naissance d'un salarié avant de lui permettre d'accéder à la signature
*
* Body: {
* docuseal_id: string,
* birthdate: string (format YYYY-MM-DD)
* }
*/
export async function POST(request: NextRequest) {
console.log('=== API Vérification Date de Naissance Salarié ===');
try {
const { docuseal_id, birthdate } = await request.json();
// Validation des paramètres
if (!docuseal_id || !birthdate) {
console.error('❌ Paramètres manquants:', { docuseal_id, birthdate });
return NextResponse.json(
{ error: 'Paramètres manquants', verified: false },
{ status: 400 }
);
}
console.log('🔍 Vérification pour docuseal_id:', docuseal_id);
// Créer le client Supabase avec service role
const supabase = createSbServiceRole();
// 1. Récupérer l'email du salarié depuis la soumission DocuSeal
// On cherche dans cddu_contracts pour trouver le contrat lié au slug DocuSeal
const { data: contract, error: contractError } = await supabase
.from('cddu_contracts')
.select('employee_id, salarie_email')
.eq('docuseal_employee_slug', docuseal_id)
.maybeSingle();
if (contractError) {
console.error('❌ Erreur lors de la récupération du contrat:', contractError);
return NextResponse.json(
{ error: 'Erreur lors de la vérification', verified: false },
{ status: 500 }
);
}
if (!contract) {
console.error('❌ Aucun contrat trouvé pour docuseal_id:', docuseal_id);
return NextResponse.json(
{ error: 'Document introuvable', verified: false },
{ status: 404 }
);
}
console.log('📄 Contrat trouvé:', {
employee_id: contract.employee_id,
salarie_email: contract.salarie_email
});
// 2. Récupérer la date de naissance du salarié depuis la table salaries
const { data: salarie, error: salarieError } = await supabase
.from('salaries')
.select('date_naissance, prenom, nom')
.eq('id', contract.employee_id)
.maybeSingle();
if (salarieError) {
console.error('❌ Erreur lors de la récupération du salarié:', salarieError);
return NextResponse.json(
{ error: 'Erreur lors de la vérification', verified: false },
{ status: 500 }
);
}
if (!salarie) {
console.error('❌ Salarié introuvable pour employee_id:', contract.employee_id);
return NextResponse.json(
{ error: 'Salarié introuvable', verified: false },
{ status: 404 }
);
}
if (!salarie.date_naissance) {
console.warn('⚠️ Date de naissance non renseignée pour le salarié');
// Si pas de date de naissance en base, on accepte quand même (pour ne pas bloquer)
return NextResponse.json({
verified: true,
message: 'Vérification acceptée (date de naissance non renseignée)'
});
}
console.log('👤 Salarié trouvé:', {
prenom: salarie.prenom,
nom: salarie.nom,
date_naissance: salarie.date_naissance
});
// 3. Comparer les dates de naissance
// Normaliser les dates pour la comparaison (format YYYY-MM-DD)
const dbBirthdate = new Date(salarie.date_naissance).toISOString().split('T')[0];
const inputBirthdate = new Date(birthdate).toISOString().split('T')[0];
console.log('📅 Comparaison dates:', {
db: dbBirthdate,
input: inputBirthdate,
match: dbBirthdate === inputBirthdate
});
if (dbBirthdate === inputBirthdate) {
console.log('✅ Date de naissance vérifiée avec succès');
return NextResponse.json({
verified: true,
message: 'Date de naissance vérifiée'
});
} else {
console.log('❌ Date de naissance incorrecte');
return NextResponse.json(
{
error: 'Date de naissance incorrecte',
verified: false
},
{ status: 401 }
);
}
} catch (error) {
console.error('❌ Erreur lors de la vérification de la date de naissance:', error);
return NextResponse.json(
{
error: 'Erreur serveur lors de la vérification',
verified: false
},
{ status: 500 }
);
}
}