6.7 KiB
Génère l’architecture complète d’une application Laravel 12 pour gérer un workflow d’intégration d’agents dans une collectivité territoriale.
Stack obligatoire : Laravel 12, PHP 8.3, MySQL 8, Vue 3, Inertia, Tailwind, Spatie Permission.
L’application doit inclure :
Gestion agents
Workflow basé sur machine à états
Génération automatique de tâches par service
SLA + relances automatiques
Checklists dynamiques
Tableaux de bord par rôle
Notifications
Journal d’audit
Offboarding
Respecter :
Architecture propre (Services, Actions, DTO, Policies)
Pas de logique métier dans controllers
Tests unitaires
Code maintenable
Génère :
Migrations
Models avec relations
Services métier
Enums
Exemple de controllers
Structure Vue 3 + Inertia
Scheduler SLA
Seeders de rôles
- Contexte Projet
Objectif Développer une application interne en Laravel 12 permettant de gérer le processus d’intégration d’un nouvel agent dans une collectivité territoriale.
L’application doit : Centraliser les demandes d’intégration Générer automatiquement les tâches par service Permettre la validation indépendante des services Suivre les statuts globaux Gérer des checklists dynamiques Intégrer un système de rôles Fournir des tableaux de bord par service Gérer des SLA et relances automatiques
-
Stack Technique Imposée Laravel 12 PHP 8.3+ MySQL 8+ Vue 3 Inertia.js TailwindCSS Spatie Laravel Permission Laravel Notifications Laravel Queues Laravel Policies Laravel Form Requests
-
Architecture Logique Globale Architecture en couches App/ ├── Actions/ ├── DTOs/ ├── Enums/ ├── Events/ ├── Http/ │ ├── Controllers/ │ ├── Requests/ │ └── Resources/ ├── Models/ ├── Notifications/ ├── Policies/ ├── Services/ ├── States/ └── Jobs/
-
Modèle de Données Détaillé Standard Laravel + Spatie
4.2 Table services Représente :
-
DSI
-
Bâtiment
-
Parc Auto
-
RH
id name code (dsi, batiment, parc_auto, rh) is_active timestamps
4.3 Table agents id first_name last_name email position department arrival_date integration_status (enum) created_by validated_by_rh_at timestamps
4.4 Table integration_requests id agent_id template_id (nullable) status (enum) global_deadline completed_at timestamps
4.5 Table service_tasks id integration_request_id service_id status (enum) sla_deadline started_at completed_at validated_by timestamps
4.6 Table task_items id service_task_id label is_mandatory is_completed completed_at completed_by timestamps
4.7 Table integration_templates id name description is_active timestamps
4.8 Table template_service_items id template_id service_id label is_mandatory
-
-
Machine à États (State Pattern) Utiliser un système basé sur Enum + Classes d'état.
Enum IntegrationStatus Draft PendingRHValidation InProgress WaitingServices Completed Cancelled Rejected
Enum ServiceTaskStatus Pending InProgress WaitingValidation Completed Rejected
Implémentation Créer : App/States/Integration/ App/States/ServiceTask/
Chaque état doit : Autoriser certaines transitions Bloquer les transitions invalides Déclencher des événements
-
Logique Métier (Service Layer)
6.1 IntegrationService
Responsabilités : Créer une demande Générer les tâches automatiquement Calculer les deadlines SLA Vérifier si toutes les tâches sont complètes Clôturer l’intégration
6.2 ServiceTaskManager
Démarrer tâche Valider tâche Refuser tâche Ajouter commentaire -
Système de Notifications À implémenter : Notification quand RH valide Notification quand tâche assignée Relance automatique si SLA dépassé Notification fin intégration
Utiliser : Notifications database Email Queue
- Gestion des SLA Créer : Job CheckSlaDeadlines Planifié via scheduler : $schedule->job(CheckSlaDeadlines::class)->everyHour();
Logique : Cherche tâches en retard Envoie notification Marque comme "overdue"
-
Gestion des Rôles Avec Spatie :
Rôles : Admin RH DSI Batiment ParcAuto Prescripteur
Permissions : create integration validate rh manage dsi tasks manage batiment tasks manage parc auto tasks view dashboard export reports
-
Dashboards Dashboard RH Intégrations en attente validation Retards Statistiques mensuelles
Dashboard Service Tâches assignées Tâches urgentes Tâches en retard
Dashboard Admin Vue globale KPI Temps moyen d’intégration Répartition par service
🎨 11. Frontend (Vue 3 + Inertia) Pages : Integration/Index Integration/Create Integration/Show Dashboard/RH Dashboard/Service Dashboard/Admin Templates/Index Templates/Edit
Composants :
StatusBadge
ChecklistComponent
ServiceTaskCard
TimelineComponent
SlaIndicator
ConfirmationModal
-
Journal d’Audit Créer table :
activity_logs id user_id subject_type subject_id action description properties (json) created_atOu utiliser : Spatie Activitylog
-
Offboarding Même structure que intégration : Ajouter colonne :
type (onboarding / offboarding) -
Sécurité Authentification : Laravel Sanctum Autorisation : Laravel Policies Protection CSRF Rate limiting Validation des entrées Protection contre XSS Protection contre SQL Injection
-
Standards de Développement Respecter SOLID Utiliser FormRequest Utiliser Policies Pas de logique métier dans les controllers Couvrir les transitions avec tests PHPUnit Générer factories Générer seeders
-
Tests Obligatoires Test création intégration Test génération tâches auto Test transition statut Test clôture automatique Test dépassement SLA