← Retour à la marketplace
📅

Réservation

⭐ Recommandé

Système de réservation en ligne avec créneaux, disponibilités et confirmations.

PlanningComplexe~12 joursv1.1.0

Moteur de réservation flexible : gestion des ressources (salles, personnel, équipements), créneaux de disponibilité, réservation en ligne, confirmations automatiques, annulations et liste d'attente.

bookingavailabilitycalendarslotsresources

Dépendances requises :

📋 Schéma Prisma

// === Module Réservation ===

enum BookingStatus {
  PENDING
  CONFIRMED
  CANCELLED
  NO_SHOW
  COMPLETED
}

model Resource {
  id           String       @id @default(cuid())
  name         String
  type         String       // room, person, equipment
  capacity     Int          @default(1)
  isActive     Boolean      @default(true)
  description  String?
  createdAt    DateTime     @default(now())
  updatedAt    DateTime     @updatedAt
  availabilities Availability[]
  bookings     Booking[]

  @@map("resources")
}

model Availability {
  id         String   @id @default(cuid())
  resourceId String
  resource   Resource @relation(fields: [resourceId], references: [id], onDelete: Cascade)
  dayOfWeek  Int      // 0=lundi...6=dimanche
  startTime  String   // "09:00"
  endTime    String   // "18:00"
  isActive   Boolean  @default(true)

  @@map("availabilities")
}

model Booking {
  id           String        @id @default(cuid())
  resourceId   String
  resource     Resource      @relation(fields: [resourceId], references: [id])
  contactName  String
  contactEmail String
  contactPhone String?
  startsAt     DateTime
  endsAt       DateTime
  status       BookingStatus @default(PENDING)
  notes        String?
  confirmToken String?       @unique
  cancelToken  String?       @unique
  createdAt    DateTime      @default(now())
  updatedAt    DateTime      @updatedAt

  @@map("bookings")
}

🔌 Endpoints API

## API Réservation

GET  /api/resources                    # Liste des ressources
POST /api/resources                    # Créer une ressource
PUT  /api/resources/:id/availability   # Définir les disponibilités

GET  /api/availability?resourceId=&date= # Créneaux dispo pour une date
POST /api/bookings                     # Créer une réservation
GET  /api/bookings                     # Liste (filtres: resource, status, date)
GET  /api/bookings/:id                 # Détail
PUT  /api/bookings/:id/confirm         # Confirmer
PUT  /api/bookings/:id/cancel          # Annuler
GET  /api/bookings/confirm/:token      # Confirmation par lien email
GET  /api/bookings/cancel/:token       # Annulation par lien email

🛠️ Guide d'implémentation

## Implémentation Réservation

### Étape 1 — Modèles et disponibilités
Intégrer les modèles. Implémenter l'algorithme de calcul des créneaux libres.

### Étape 2 — Moteur de disponibilité
Créer src/lib/booking/availability.ts :
- Calculer les créneaux libres pour une ressource et une date
- Vérifier les conflits avant création
- Gérer les durées paramétrables

### Étape 3 — Workflow de réservation
- Création → email confirmation avec lien
- Confirmation → email de rappel J-1
- Annulation → libération du créneau

### Étape 4 — Widget public (optionnel)
Créer une page publique /book/:resourceSlug pour permettre la réservation sans connexion.

Prêt à installer ce module ?

Ajoutez-le à un projet existant depuis la page modules du projet.

Voir les projets →