Zum Hauptinhalt springen
War diese Seite hilfreich?

Buchung API

Reservierungen und öffentliche Buchung

Reservierungskalender verwalten, Reservierungen erstellen und öffentliche Buchungslinks anzeigen

Diese Seite gruppiert die Nicht-Administrator-Buchungsoberfläche: Reservierungskalenderverwaltung, intern Reservierungs-CRUD und die öffentlichen Buchungsendpunkte, die mit veröffentlichten Ressourcentokens arbeiten.

JWT oder Benutzer API SchlüsselÖffentliche Buchung ist nicht authentifiziertRollenbasierte ReservierungskalenderReservierungszugangswächter

Authentifizierung und Berechtigungen​

  • Reservierungskalenderrouten erfordern Authentifizierung und Rollenprüfungen.
  • Interne Reservierung CRUD erfordert JwtAuthGuard plus ReservationAccessGuard.
  • Öffentliche Buchungsrouten sind nicht authentifiziert und verwenden das Token in der URL.

Wichtiger Quellenhinweis:

Endpunktreferenz​

Verwaltung des Reservierungskalenders​

MethodePfadZweckAnfrage oder AnfrageAuth
POST/api/organisations/:id/reservation-calendarsErstellen Sie einen Reservierungskalender für eine Organisation.Pfad: id, Text: KalendernutzlastJWT oder Benutzerschlüssel API
GET/api/organisations/:id/reservation-calendarsReservierungskalender für eine Organisation auflisten.Pfad: idJWT oder Benutzerschlüssel API
POST/api/reservation-calendars/:id/rolesWeisen Sie einem Benutzer eine Reservierungskalenderrolle zu.Pfad: id, Text: userId,roleJWT oder Benutzerschlüssel API
DELETE/api/reservation-calendars/:id/roles/:userIdEntfernen Sie eine Reservierungskalenderrolle.Pfad: id,userIdJWT oder Benutzerschlüssel API
GET/api/reservation-calendars/:id/rolesRollenzuweisungen auflisten.Pfad: idJWT oder Benutzerschlüssel API
GET/api/users/reservation-calendarsListen Sie Reservierungskalender auf, auf die der aktuelle Benutzer zugreifen kann.KeineJWT oder Benutzerschlüssel API
GET/api/reservation-calendars/:id/my-roleRufen Sie die Rolle des aktuellen Benutzers ab.Pfad: idJWT oder Benutzerschlüssel API
GET/api/reservation-calendars/:id/has-role/:roleTesten Sie, ob der aktuelle Benutzer eine Rolle hat.Pfad: id,roleJWT oder Benutzerschlüssel API
POST/api/reservation-calendars/:id/reservationsBeispiel einer Reservierungsaktion nur für den Editor.Pfad: idJWT oder Benutzerschlüssel API
GET/api/reservation-calendars/:id/reservationsBeispiel für eine Reservierungslistenaktion für Redakteure oder Prüfer.Pfad: idJWT oder Benutzerschlüssel API
POST/api/reservation-calendars/:id/reservations/:reservationId/approveBeispiel einer Genehmigungsaktion.Pfad: id,reservationIdJWT oder Benutzerschlüssel API

Interne Reservierungen​

MethodePfadZweckAnfrage oder AnfrageAuth
POST/api/reservationsErstellen Sie eine Reservierung.Hauptteil: ReservierungsfelderJWT oder Benutzerschlüssel API
GET/api/reservationsReservierungen auflisten.Abfrage: resourceIdJWT oder Benutzerschlüssel API
GET/api/reservations/:idHolen Sie sich eine Reservierung.Pfad: idJWT oder Benutzerschlüssel API
PATCH/api/reservations/:idAktualisieren Sie eine Reservierung.Pfad: id, Text: TeilreservierungsfelderJWT oder Benutzerschlüssel API
DELETE/api/reservations/:idEine Reservierung löschen.Pfad: idJWT oder Benutzerschlüssel API

Öffentliche Buchung​

MethodePfadZweckAnfrage oder AnfrageAuth
GET/api/public/booking/:tokenÖffentliche Buchungsmetadaten auflösen.Pfad: tokenÖffentlich
GET/api/public/booking/:token/availabilityLesen Sie die verfügbaren Slots für einen Tag.Pfad: token, Abfrage: dateÖffentlich
POST/api/public/booking/:token/reserveErstellen Sie eine öffentliche Reservierung.Pfad: token, Text: BuchungsfelderÖffentlich

Fordern Sie Formen an​

Reservierungskalender​

CreateReservationCalendarDto

  • name: erforderlich, 1..100 Zeichen
  • description: optional, maximal 500 Zeichen
  • color: optionale Hex-Farbe
  • reservationRules: optionales Objekt
  • editorUserIds: optionales eindeutiges positives Ganzzahl-Array
  • reviewerUserIds: optionales eindeutiges positives Ganzzahl-Array

AssignRoleDto

  • userId: erforderliche positive Zahl
  • role: erforderliche Enumeration ReservationCalendarRoleType

Interne Reservierungen​

CreateReservationDto und UpdateReservationDto

  • startTime: beim Erstellen erforderlich, ISO-Datum/Uhrzeit
  • endTime: beim Erstellen erforderlich, ISO-Datum/Uhrzeit, muss nach startTime liegen
  • quantity: optionaler int, mindestens 1
  • customerInfo: optionales Objekt
  • notes: optionale bereinigte Zeichenfolge, maximal 2048 Zeichen
  • resourceId: beim Erstellen erforderlich, mindestens 1
  • status: Nur-Update-Enumeration pending|confirmed|completed|cancelled|waitlist

Abfrage:

  • ListReservationsQueryDto.resourceId: optionaler int >= 1

Öffentliche Buchung​

CreatePublicBookingDto

  • startTime: erforderliches ISO-Datum/Uhrzeit
  • endTime: erforderliches ISO-Datum/Uhrzeit
  • quantity: erforderliche Ganzzahl, mindestens 1
  • customerName: erforderliche Zeichenfolge
  • customerEmail: erforderliche E-Mail
  • customerPhone: erforderliche Zeichenfolge
  • notes: optionale Zeichenfolge

Verfügbarkeitsabfrage:

  • date: erforderliche ISO-Datumszeichenfolge

Beispielanrufe​

Erstellen Sie einen Reservierungskalender​

curl -X POST "$PRIMECAL_API/api/organisations/12/reservation-calendars" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Family bookings",
"color": "#14b8a6",
"editorUserIds": [18],
"reviewerUserIds": [19]
}'

Erstellen Sie eine Reservierung​

curl -X POST "$PRIMECAL_API/api/reservations" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startTime": "2026-04-01T08:00:00.000Z",
"endTime": "2026-04-01T09:00:00.000Z",
"resourceId": 21,
"quantity": 1
}'

Erstellen Sie eine öffentliche Buchung​

curl -X POST "$PRIMECAL_API/api/public/booking/$PUBLIC_TOKEN/reserve" \
-H "Content-Type: application/json" \
-d '{
"startTime": "2026-04-01T08:00:00.000Z",
"endTime": "2026-04-01T09:00:00.000Z",
"quantity": 1,
"customerName": "Alex Example",
"customerEmail": "alex@example.com",
"customerPhone": "+36301112222"
}'

Hinweise zu Reaktion und Verhalten​

  • Interne Reservierungen werden durch ReservationAccessGuard geschützt.
  • Beispielendpunkte für den Reservierungskalender sind rollengesteuert, befinden sich jedoch derzeit auf Gerüstebene in der Implementierung.
  • Öffentliche Buchungsendpunkte verwenden nur das veröffentlichte Token. Sie erfordern keine Authentifizierung.

Best Practices​

  • Verwenden Sie Reservierungskalender für rollenbewusste Workflows und /api/reservations für tatsächliche interne Reservierungs-CRUD.
  • Validieren Sie das Bestelldatum auf Kundenseite, bevor Sie Reservierungsschreiben senden.
  • Behandeln Sie öffentliche Buchungstoken als Geheimnisse. Generieren Sie sie neu, wenn Links verloren gehen oder Personaländerungen auftreten.
  • Fügen Sie Ratenbegrenzung oder Anti-Bot-Schutz vor öffentlichen Buchungsformularen hinzu.