feat: implementation des dossiers candidats PDF, gestion des entretiens et optimisation de l'analyse IA

This commit is contained in:
jeremy bayse
2026-04-19 15:35:16 +02:00
parent 4017e3d9c5
commit f3d630d741
27 changed files with 2550 additions and 741 deletions

View File

@@ -139,8 +139,20 @@ class CandidateController extends Controller
$request->validate([
'cv' => 'nullable|file|mimes:pdf|max:5120',
'cover_letter' => 'nullable|file|mimes:pdf|max:5120',
'name' => 'nullable|string|max:255',
'email' => 'nullable|string|email|max:255|unique:users,email,' . $candidate->user_id,
'phone' => 'nullable|string|max:255',
'linkedin_url' => 'nullable|url|max:255',
]);
// Update User info if name or email present
if ($request->has('name') || $request->has('email')) {
$candidate->user->update($request->only(['name', 'email']));
}
// Update Candidate info
$candidate->update($request->only(['phone', 'linkedin_url']));
if ($request->hasFile('cv')) {
$this->replaceDocument($candidate, $request->file('cv'), 'cv');
}
@@ -149,20 +161,24 @@ class CandidateController extends Controller
$this->replaceDocument($candidate, $request->file('cover_letter'), 'cover_letter');
}
return back()->with('success', 'Documents mis à jour avec succès.');
return back()->with('success', 'Profil mis à jour avec succès.');
}
public function updateNotes(Request $request, Candidate $candidate)
{
$request->validate([
'notes' => 'nullable|string',
'interview_details' => 'nullable|array',
'interview_score' => 'nullable|numeric|min:0|max:30',
]);
$candidate->update([
'notes' => $request->notes,
'interview_details' => $request->interview_details,
'interview_score' => $request->has('interview_score') ? $request->interview_score : $candidate->interview_score,
]);
return back()->with('success', 'Notes mises à jour avec succès.');
return back()->with('success', 'Entretien mis à jour avec succès.');
}
public function updateScores(Request $request, Candidate $candidate)