Evenementen
Rol: lid (bekijken en aanmelden), eigenaar (volledig beheer: aanmaken, bewerken, verwijderen)
De Events-tab toont aankomende clubevenementen zoals toernooien, klinieken en onderlinge competities. Leden kunnen zich aanmelden voor evenementen met beschikbare plaatsen. Alleen de eigenaar beheert de evenementenkalender.
Aanmeldflow
Evenemententypen
| Type | Omschrijving |
|---|---|
tournament | Officieel clubtoernooi met bracket en prijzen |
clinic | Thematische trainingsdag met gasttrainer of thema |
competition | Onderlinge competitie of ranglijstwedstrijd |
other | Overige clubactiviteiten (borrel, ledenvergadering, etc.) |
UI: Evenementenkaart
Elke kaart toont:
- Naam — titel van het evenement
- Type — kleurgebonden badge (toernooi, kliniek, etc.)
- Datum en tijd — inclusief start- en eindtijd indien opgegeven
- Locatie — adres of zaalindicatie
- Prijs — in euro; gratis indien
price: 0of leeg - Capaciteit — resterende plekken tonen (berekend als
capacity - enrollments.count) - Aanmeldknop — status afhankelijk van inschrijfstatus en capaciteit
Datamodellen
Evenementen
Clubevenementen zoals toernooien, klinieken en wedstrijden. Enkel door eigenaar beheerd.
| Veld | Type | Verplicht | Beschrijving | Beperkingen |
|---|---|---|---|---|
name | text | ✓ | Naam van het evenement | — |
description | text | — | Uitgebreide beschrijving | — |
date | date | ✓ | Datum van het evenement | — |
startTime | text | — | Starttijd als HH:MM string | — |
endTime | text | — | Eindtijd als HH:MM string | — |
location | text | — | Locatie of adres | — |
type | select | — | Type evenement | tournament | clinic | competition | other |
banner | text | — | URL of bestandsreferentie voor bannerafbeelding | — |
price | number | — | Deelnameprijs in euro | min 0 |
capacity | number | — | Maximum aantal deelnemers | min 0 |
Toegangsregels
| Regel | Expressie |
|---|---|
list | @request.auth.id != '' |
view | @request.auth.id != '' |
create | @request.auth.role = 'eigenaar' |
update | @request.auth.role = 'eigenaar' |
delete | @request.auth.role = 'eigenaar' |
Aanmeldingen
Koppeltabel tussen leden en evenementen. Unieke index voorkomt dubbele aanmeldingen.
| Veld | Type | Verplicht | Beschrijving | Beperkingen |
|---|---|---|---|---|
event | relation | ✓ | Verwijzing naar het evenement | → events · cascade delete |
user | relation | ✓ | Aangemelde gebruiker | → users |
Indexen: UNIQUE (event, user) — voorkomt dubbele aanmelding
Toegangsregels
| Regel | Expressie |
|---|---|
list | @request.auth.id != '' |
view | @request.auth.id != '' |
create | @request.auth.id != '' |
update | (niet van toepassing) |
delete | @request.auth.id = user.id || @request.auth.role = 'eigenaar' |
Ontwerpkeuzes
Alleen eigenaar maakt evenementen aan In tegenstelling tot trainingen — waarbij trainers ook sessies kunnen aanmaken — zijn evenementen uitsluitend voorbehouden aan de eigenaar. Evenementen vertegenwoordigen formele clubactiviteiten die coördinatie, communicatie en soms betalingsafhandeling vereisen. De eigenaar houdt zo het overzicht over de clubkalender.
Zelfde inschrijfpatroon als trainingen
event_enrollments volgt exact hetzelfde patroon als training_enrollments: een koppeltabel met UNIQUE-index op (event, user). Dit maakt de logica in de app voorspelbaar en herbruikbaar.
Geen wachtlijst voor evenementen Anders dan bij trainingen (waar een wachtlijst-knop verschijnt) toont de app bij een vol evenement simpelweg een uitgeschakelde “Vol”-knop. Evenementen hebben doorgaans een rigidere capaciteit (zaalgrootte, officiële inschrijvingsdeadlines) waarvoor een wachtlijst onpraktisch is zonder aanvullende notificatielogica.