Files
RecruIT/instruction.md
jeremy bayse a55a33ae2a Initial commit
2026-03-20 08:25:58 +01:00

5.9 KiB

📋 Plan de l'Application : RecruitQuizz ProCe document détaille les spécifications pour une plateforme de gestion de candidatures et d'évaluation technique.1. Architecture TechniqueBackend : Laravel 12 (PHP 8.4+)Frontend : Vue.js 3 ou React (via Vite) pour une interface réactive.Base de données : PostgreSQL ou MySQL.Stockage : Driver local ou S3 pour les CV et lettres de motivation.Authentification : Laravel Breeze ou Jetstream (pour gérer les deux types d'accès : Admin et Candidat).2. Structure des Données (Modèles)Voici les entités principales à générer :Candidate : Nom, email, téléphone, liens (GitHub/LinkedIn), status (en attente, testé, retenu).Document : Type (CV, LM), chemin du fichier, lié au Candidat.Quiz : Titre, description, temps imparti.Question : Libellé, type (QCM, texte court), points.Option : Les réponses possibles pour les QCM.Attempt (Essai) : Score final, temps passé, réponses du candidat, statut (terminé ou en cours).3. Fonctionnalités Clés🔐 Espace Administration (Ton interface)Dashboard : Vue d'ensemble (nombre de candidats, moyenne des scores).Gestion des Candidats : * Formulaire de création (Nom, Prénom, Email).Upload de documents avec prévisualisation PDF intégrée.Bouton "Générer Accès" : crée automatiquement un compte utilisateur avec un mot de passe unique.Banque de Questions : Interface pour saisir tes 40 questions et définir la bonne réponse.Comparateur : Tableau triable par score, temps de réponse et date de candidature.📝 Espace Candidat (Interface d'examen)Login Dédié : Accès restreint au quiz assigné.Interface Quiz : * Affichage une question à la fois.Barre de progression et compte à rebours.Sauvegarde automatique des réponses en base de données (pour éviter les pertes en cas de crash navigateur).Fin de test : Message de remerciement (sans afficher le score immédiatement, pour garder la main sur le feedback).4. Logique de ScoringPour comparer efficacement, nous utiliserons un calcul de score pondéré. Si S est le score final, n le nombre de questions, et w le poids de chaque question :$S = \sum_{i=1}^{n} (réponse_{i} \times poids_{i})$Tu pourras également intégrer un ratio "Précision/Temps" pour départager deux candidats ayant le même score.5. Roadmap de Développement pour AntigravityDemande à Antigravity de suivre ces étapes dans l'ordre :Step 1 : Setup de Laravel 12 avec l'authentification multi-auth (Admin vs User).Step 2 : Création des migrations pour candidates, quizzes, questions et attempts.Step 3 : Développement du système d'upload de fichiers sécurisé (seul l'admin doit pouvoir lire les CV).Step 4 : Création du moteur de rendu du quiz côté Frontend (Vite/Vue).Step 5 : Développement de la vue "Comparatif" avec filtres et graphiques simples pour les scores.

Structure de la Base de Données Rôle : Agis en tant qu'expert Architecte Laravel. Objectif : Générer les migrations, les modèles et les relations Eloquent pour une application de recrutement appelée "RecruitQuizz". Stack : Laravel 12, PHP 8.4.

Instructions techniques : > Crée les migrations et les modèles avec les champs et relations suivants :

User : Utilise la table par défaut mais ajoute un champ role (enum: admin, candidate).

Candidate : > - Champs : user_id (FK), phone, linkedin_url, status (en_attente, en_cours, termine).

Relation : BelongsTo User, HasMany Documents, HasMany Attempts.

Document : > - Champs : candidate_id (FK), type (cv, cover_letter), file_path, original_name.

Relation : BelongsTo Candidate.

Quiz : > - Champs : title, description, duration_minutes (default 60).

Relation : HasMany Questions.

Question : > - Champs : quiz_id (FK), label (text), points (int), type (qcm, open).

Relation : BelongsTo Quiz, HasMany Options.

Option : > - Champs : question_id (FK), option_text, is_correct (boolean).

Relation : BelongsTo Question.

Attempt (Essai) : > - Champs : candidate_id (FK), quiz_id (FK), score (float, nullable), started_at, finished_at (nullable).

Relation : BelongsTo Candidate, BelongsTo Quiz, HasMany Answers.

Answer : > - Champs : attempt_id (FK), question_id (FK), option_id (FK, nullable pour questions ouvertes), text_content (text, nullable).

Livrables attendus : > - Fichiers de migration complets avec contraintes d'intégrité (onDelete cascade).

Modèles PHP avec les propriétés $fillable et les méthodes de relations (HasMany, BelongsTo).

Interface Admin & UX Rôle : Expert Frontend & UI/UX Designer. Objectif : Créer les vues Blade/Vue.js pour le Dashboard Admin de "RecruitQuizz" en utilisant Tailwind CSS.

Directives de Design :

Style : Minimaliste, professionnel, mode sombre (dark mode) supporté.

Framework : Utiliser les composants Tailwind CSS (ou Flowbite/Headless UI).

Navigation : Une barre latérale (sidebar) fixe avec les sections : Dashboard, Candidats, Quiz, Comparateur.

Pages à générer :

Tableau de Bord (Index) : > - 4 "Stats Cards" en haut : Total Candidats, Tests terminés, Moyenne Générale, Meilleur Score.

Un graphique simple (Chart.js) montrant la distribution des scores.

Gestion des Candidats (Liste & Création) :

Un tableau (Datatable) avec recherche et filtres.

Un modal de création incluant l'upload de fichiers (Drag & Drop) pour le CV et la Lettre de Motivation.

Indicateurs visuels par badge pour le statut (ex: Success pour "Terminé", Warning pour "En attente").

Profil Candidat (Détails) :

Un panneau latéral ou une vue scindée : à gauche les infos/documents, à droite les résultats détaillés du quiz.

Intégration d'un Iframe ou Viewer PDF pour consulter le CV sans le télécharger.

Vue de Comparaison (Le "Leaderboard") :

Un tableau comparatif permettant de cocher 2 ou 3 candidats pour comparer leurs scores par catégorie de questions.

Colonnes : Nom, Score %, Temps passé, Date, Actions.

Livrables attendus :

Layout principal (App Layout).

Templates Blade avec composants réutilisables.

Scripts Vite pour la gestion des interactions (modaux, upload).