Application web Laravel pour la gestion des places de parking de la Maison des Ligues (M2L).
ParkLigue est une application web développée dans le cadre du BTS SIO SLAM, pour la Maison des Ligues (M2L). Le projet répond à un problème concret : éliminer le stationnement sauvage dans les parkings de l'organisation en permettant à chaque membre du personnel de réserver une place numérotée.
Réalisation en équipe du 09/03/2026 au 02/04/2026 au Campus Charles de Foucauld, Paris.
Le projet suit le patron Model-View-Controller de Laravel, avec une séparation claire entre la logique métier, les données et les vues Blade.
projet_parking/ ├── app/ │ ├── Http/Controllers/ │ │ ├── ReservationController.php │ │ ├── AdminController.php │ │ └── Auth/ │ └── Models/ │ ├── User.php │ ├── Place.php │ ├── Reservation.php │ └── PlaceListeAttente.php ├── database/migrations/ ├── resources/views/ │ ├── dashboard.blade.php │ ├── admin/ │ └── auth/ └── routes/web.php
Utilisation du système d'authentification intégré de Laravel avec une couche de validation administrative : chaque nouveau compte doit être approuvé par l'administrateur avant de pouvoir accéder à l'application.
Le dashboard est le cœur de l'application pour l'agent. Il affiche en temps réel l'état de sa réservation.
Chaque utilisateur dispose d'un historique complet de ses réservations passées avec les dates de début et de fin.
Lorsqu'un utilisateur fait une demande, le système :
actif et non réservéesinRandomOrder()->first()Reservation liée à l'utilisateur et la place// Cherche une place libre $place = Place::where('statut', 'actif') ->whereDoesntHave('reservations', function($q) { $q->whereNull('date_fin'); }) ->inRandomOrder() ->first(); if (!$place) { // → Mise en file d'attente }
Si aucune place n'est disponible, l'utilisateur est automatiquement placé en file d'attente. Son rang est calculé en fonction de la date de sa demande.
À chaque libération de place (expiration ou clôture manuelle), le système :
date_demande)place_liste_attentesLa durée de réservation est un paramètre configurable par l'administrateur (en heures). À l'expiration, la réservation est marquée comme terminée et la file d'attente est consultée.
L'administrateur dispose d'un panneau dédié avec accès complet à toutes les entités.
L'administrateur peut modifier à tout moment la durée maximale d'une réservation. Ce paramètre est stocké en base et appliqué à toutes les nouvelles réservations créées après modification.
Le schéma comprend quatre entités principales reliées par des associations. Les migrations Laravel (Eloquent Code First) ont été utilisées pour générer la base MySQL.
Fichier : app/Models/User.php
class User extends Authenticatable { public function reservations() { return $this->hasMany(Reservation::class); } public function listeAttente() { return $this->hasOne( PlaceListeAttente::class ); } }
Fichier : app/Models/Place.php
class Place extends Model { public function reservations() { return $this->hasMany(Reservation::class); } public function reservationActive() { return $this->hasOne(Reservation::class) ->whereNull('date_fin'); } }
Ce projet m'a permis de maîtriser le cycle complet d'une application web Laravel en conditions réelles :