89 lines
5.9 KiB
Markdown
89 lines
5.9 KiB
Markdown
📋 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).
|
|
|