Skip to content

Reserveringen

Rol: lid (reservering plaatsen en eigen reserveringen bekijken), eigenaar (alle reserveringen beheren, goedkeuren en annuleren)

De Reservaties-tab stelt leden in staat om een van de drie padelbanen te boeken voor een tijdslot van 60 of 90 minuten. Reserveringen starten altijd met de status pending en worden door de eigenaar handmatig bevestigd of geannuleerd.

Boekingsflow

Annuleren Bevestigen Fout Gelukt Goedkeuren Afwijzen Reservaties-tab openen B dagselectie C GET D bezette E baan1 F 60 G bottom H status Foutmelding tonen J in Eigenaar beoordeelt status: confirmed status: cancelled

Statusdiagram

lid plaatst reservering eigenaar keurt goed eigenaar wijst af annulering door lid of eigenaar pending confirmed cancelled

UI-details

Dagselectie Bovenaan het scherm verschijnt een horizontale rij met datumpillen voor vandaag en de komende drie dagen. De geselecteerde dag is gemarkeerd met de teal-accentkleur (#2e8b76).

Slotgrid Per geselecteerde dag en baan wordt een grid van tijdslots weergegeven (bv. 08:00 – 22:00 in stappen van 30 minuten). Bezette slots worden visueel doorgestreept en zijn niet aanklikbaar. Beschikbare slots zijn wit op het donkere achtergrondoppervlak.

Bottom sheet modal Na het kiezen van datum, tijdslot, baan en duur verschijnt een bevestigingsmodal als bottom sheet met een samenvatting van de reservering. De gebruiker kan bevestigen of annuleren voordat de API-aanroep plaatsvindt.

Eigen overzicht Onder de boekingsinterface ziet het lid een lijst van eigen reserveringen, gesorteerd op datum. De statusbadge toont pending (amber), confirmed (groen) of cancelled (grijs).

Datamodel

Baanreserveringen door leden. Status loopt van pending → confirmed of cancelled.

Veld Type Verplicht Beschrijving Beperkingen
user relation Lid dat de baan reserveert → users
date date Datum van de reservering
court select Gereserveerde baan baan1 | baan2 | baan3
startTime text Starttijd als HH:MM string
duration select Duur van de reservering in minuten 60 | 90
status select Status van de reservering pending | confirmed | cancelled
notes text Optionele notitie van het lid
Toegangsregels
RegelExpressie
list @request.auth.id = user.id || @request.auth.role = 'eigenaar'
view @request.auth.id = user.id || @request.auth.role = 'eigenaar'
create @request.auth.id != ''
update @request.auth.id = user.id || @request.auth.role = 'eigenaar'
delete @request.auth.id = user.id || @request.auth.role = 'eigenaar'

Ontwerpkeuzes

Pending als beginstatus Er is bewust gekozen voor een goedkeuringsflow in plaats van directe bevestiging. De eigenaar heeft zo controle over de baanbezetting, kan dubbelboekingen corrigeren en kan rekening houden met geplande onderhoudsmomenten die niet in het systeem zijn ingevoerd.

Drie banen (baan1–baan3) De banen zijn vastgelegd als een select-veld met drie opties, aansluitend op de fysieke accommodatie. Het toevoegen van een vierde baan vereist een schema-aanpassing in PocketBase en een update van de UI.

Duur: 60 of 90 minuten Alleen twee gangbare duraties worden aangeboden om de slotberekening eenvoudig te houden. Een vrij invoerveld voor duur zou overlappende reserveringen lastiger detecteerbaar maken.

Bekende beperking

Er bestaat geen UNIQUE-constraint op de combinatie (date, court, startTime) in PocketBase. Conflictdetectie (overlappende reserveringen op dezelfde baan) wordt momenteel alleen aan de clientzijde afgedwongen door bezette slots in de UI te markeren als niet-selecteerbaar. Bij gelijktijdige boekingen door twee leden is een dubbelreservering technisch mogelijk. Een server-side constraint of een transactionele check via een PocketBase hook wordt aanbevolen als toekomstige verbetering.