Vous souhaitez nous soutenir ? Devenez sponsor de l'association sur notre page Github

Gérez efficacement vos plannings avec Laravel Zap !

Publié le 23 juillet 2025 par Laravel Jutsu
Couverture de l'article Gérez efficacement vos plannings avec Laravel Zap !

Laravel Zap : la gestion d'horaires simplifiée est un package qui révolutionne la façon dont vous gérez les plannings, réservations et disponibilités dans vos applications Laravel. Cette solution permet de créer et gérer des horaires complexes avec une approche native Laravel, tout en évitant les écueils classiques de la gestion temporelle comme les conflits de réservation et la complexité des récurrences.

Si vous avez déjà eu à développer un système de réservation, de planification médicale ou de gestion d'emploi du temps, vous savez à quel point cela peut rapidement devenir un cauchemar technique. Entre les fuseaux horaires, les récurrences, les conflits et les règles métier, le code devient vite illisible.

Dans cet article, je vous propose de découvrir Laravel Zap, une solution élégante qui transforme ces défis en un jeu d'enfant. Ce sera aussi l'occasion de voir comment concevoir une API fluide et intuitive pour des problèmes complexes.

Fonctionnalités principales

Laravel Zap repose sur quatre concepts fondamentaux :

  • Types de schedules différenciés : disponibilité, rendez-vous, blocages et personnalisés
  • Système de règles métier configurable : validation automatique avec possibilité de surcharge
  • Détection intelligente des conflits : prévention automatique des chevauchements
  • Intégration native Laravel : Eloquent, facades, events et configuration

Cette solution s'intègre parfaitement dans l'écosystème Laravel et ne vous dispense pas d'utiliser d'autres outils comme Laravel Horizon pour la gestion des tâches asynchrones.

Exemple concret d'un classique : la réservation médicale

Prenons l'exemple d'une application de gestion d'un cabinet médical. Vous souhaitez gérer les disponibilités des médecins, les rendez-vous patients, les pauses déjeuner, etc.

Code naïf :

1// Création d'un rendez-vous sans validation
2$appointment = new Appointment();
3$appointment->doctor_id = 1;
4$appointment->patient_id = 123;
5$appointment->date = '2025-01-15';
6$appointment->start_time = '10:00';
7$appointment->end_time = '11:00';
8$appointment->save();
9 
10// Problème : aucune vérification de disponibilité !

Problèmes :

  • Pas de vérification des conflits (deux rendez-vous simultanés)
  • Gestion manuelle des horaires de travail
  • Aucune validation des règles métier
  • Code complexe pour les récurrences
  • Difficile maintenance et évolution

Détection et prévention des conflits

Laravel Zap propose un système de détection automatique des conflits :

1use Zap\Exceptions\ScheduleConflictException;
2 
3try {
4 $schedule = Zap::for($doctor)
5 ->named('Rendez-vous Patient A')
6 ->from('2025-01-15')
7 ->addPeriod('10:00', '11:00')
8 ->noOverlap() // Active la détection de conflits
9 ->save();
10} catch (ScheduleConflictException $e) {
11 // Gestion élégante du conflit
12 $conflicts = $e->getConflictingSchedules();
13 return response()->json([
14 'error' => 'Créneau déjà pris',
15 'conflicts' => $conflicts
16 ], 409);
17}

Cette approche vous permet de détecter les problèmes avant qu'ils n'arrivent en production.

Gestion classique des horaires

La solution historique nécessitait beaucoup de code personnalisé :

1// Vérification manuelle des conflits
2$existingAppointments = Appointment::where('doctor_id', $doctorId)
3 ->where('date', $date)
4 ->whereBetween('start_time', [$startTime, $endTime])
5 ->orWhereBetween('end_time', [$startTime, $endTime])
6 ->exists();
7 
8if ($existingAppointments) {
9 throw new Exception('Conflit détecté');
10}
11 
12// Gestion des récurrences
13$dates = [];
14$currentDate = $startDate;
15while ($currentDate <= $endDate) {
16 if (in_array($currentDate->dayOfWeek, [1, 2, 3, 4, 5])) { // Lundi à vendredi
17 $dates[] = $currentDate->format('Y-m-d');
18 }
19 $currentDate->addDay();
20}
21 
22// Création manuelle pour chaque date...

Mais il fallait gérer manuellement tous les cas de figure, ce qui devenait vite ingérable.

Laravel Zap : une approche moderne

Désormais, il suffit d'utiliser l'API fluide de Laravel Zap :

1use Zap\Facades\Zap;
2 
3// Définir les horaires de travail (disponibilité)
4$availability = Zap::for($doctor)
5 ->named('Horaires de bureau')
6 ->availability() // Type : disponibilité
7 ->from('2025-01-01')
8 ->to('2025-12-31')
9 ->addPeriod('09:00', '12:00') // Matin
10 ->addPeriod('14:00', '17:00') // Après-midi
11 ->weekly(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'])
12 ->save();
13 
14// Créer un rendez-vous avec validation automatique
15$appointment = Zap::for($doctor)
16 ->named('Consultation Patient A')
17 ->appointment() // Type : rendez-vous
18 ->from('2025-01-15')
19 ->addPeriod('10:00', '11:00')
20 ->noOverlap() // Validation automatique
21 ->withMetadata([
22 'patient_id' => 123,
23 'type' => 'consultation'
24 ])
25 ->save();

Laravel Zap gère automatiquement tous les aspects complexes : validation, conflits, récurrences, etc.

Types de schedules et cas d'usage

Laravel Zap propose quatre types de schedules adaptés à différents besoins :

1. Availability (Disponibilité)

1// Horaires de travail qui peuvent se chevaucher
2$workingHours = Zap::for($doctor)
3 ->availability()
4 ->named('Heures de travail')
5 ->from('2025-01-01')
6 ->addPeriod('09:00', '17:00')
7 ->weekly(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'])
8 ->save();

2. Appointment (Rendez-vous)

1// Rendez-vous qui ne peuvent pas se chevaucher
2$appointment = Zap::for($doctor)
3 ->appointment()
4 ->named('Consultation patient')
5 ->from('2025-01-15')
6 ->addPeriod('10:00', '11:00')
7 ->save();

3. Blocked (Blocage)

1// Créneaux bloqués (pause déjeuner, congés...)
2$lunchBreak = Zap::for($doctor)
3 ->blocked()
4 ->named('Pause déjeuner')
5 ->from('2025-01-01')
6 ->addPeriod('12:00', '13:00')
7 ->weekly(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'])
8 ->save();

Avantages et architecture

  • Simplicité : API fluide et intuitive, proche du langage naturel
  • Performance : Optimisations intégrées pour les requêtes complexes
  • Flexibilité : Système de règles configurable et surchargeable
  • Intégration : Facades, events, configuration Laravel native
  • Robustesse : Gestion automatique des conflits et validation
1// Vérification de disponibilité
2$isAvailable = $doctor->isAvailableAt('2025-01-15', '10:00', '11:00');
3 
4// Créneaux disponibles
5$availableSlots = $doctor->getAvailableSlots(
6 date: '2025-01-15',
7 slotDuration: 60 // 1 heure
8);

Mot de la fin ⚡

Laravel Zap représente un exemple parfait d'évolution dans l'écosystème Laravel. Il transforme une problématique complexe en une API élégante et puissante, tout en respectant les conventions et l'esprit du framework.

Cette solution vous permet de vous concentrer sur la logique métier de votre application plutôt que sur les détails techniques de la gestion temporelle. Que vous développiez un système de réservation, un planning médical ou une gestion d'emploi du temps, Laravel Zap vous fait gagner un temps précieux.

N'hésitez pas à l'essayer dans vos projets pour découvrir la puissance de cette approche moderne !

Source : https://github.com/ludoguenet/laravel-zap
Laravel Jutsu avatar
Laravel Jutsu
Laravel dans le sang, katana en main – Samouraï moderne du code 🐉

A lire

Autres articles de la même catégorie