Winkel
Rol: lid (bekijken), eigenaar (producten aanmaken, bewerken en verwijderen)
De Winkel-tab presenteert het aanbod van de clubwinkel. Leden kunnen producten bekijken met naam, prijs, afbeelding of emoji, voorraadstatus, categorie en omschrijving. De huidige implementatie is informatief — er is nog geen checkout- of winkelwagenflow.
Productweergave
Elk product wordt weergegeven als een kaart met de volgende elementen:
| Element | Bron | Opmerking |
|---|---|---|
| Visueel | image of emoji | Afbeelding heeft prioriteit; emoji als fallback |
| Naam | name | Verplicht veld |
| Prijs | price | Weergegeven als € X,XX |
| Categorie | category | Filtermogelijkheid: racket, kleding, accessoires |
| Voorraad | stock | Toont “Op voorraad” / “Uitverkocht” op basis van waarde |
| Omschrijving | description | Optioneel; ingeklapt tenzij uitgevouwen |
Categorieën
| Waarde | Weergavenaam |
|---|---|
racket | Rackets |
clothing | Kleding |
accessories | Accessoires |
other | Overig |
De Winkel-tab toont een filterbalk bovenaan waarmee het lid de lijst per categorie kan filteren. Bij het laden worden alle producten opgehaald en lokaal gefilterd.
Huidige beperkingen
De winkel is momenteel puur informatief:
- Er is geen winkelwagen of checkout-flow.
- Er is geen betalingskoppeling (Stripe, iDEAL, etc.).
- Voorraad wordt niet automatisch verlaagd bij een aankoop — het veld dient als handmatige indicatie voor de eigenaar.
Een toekomstige versie kan op basis van de bestaande stock-informatie en het products-schema een aankoopstroom opzetten zonder schema-aanpassingen.
Datamodel
Winkelartikelen zoals rackets, kleding en accessoires. Beheerd door de eigenaar.
| Veld | Type | Verplicht | Beschrijving | Beperkingen |
|---|---|---|---|---|
name | text | ✓ | Productnaam | — |
price | number | ✓ | Prijs in euro | min 0 |
image | file | — | Productafbeelding | max 5 MB · JPEG / PNG / WebP |
emoji | text | — | Emoji als visuele indicator (valt terug op als er geen afbeelding is) | — |
category | select | — | Productcategorie | racket | clothing | accessories | other |
stock | number | — | Huidige voorraad | min 0 |
description | text | — | Productomschrijving | — |
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' |
Ontwerpkeuzes
Emoji als afbeeldingsfallback
Niet elk product heeft een professionele productfoto. Het emoji-veld stelt de eigenaar in staat snel een visuele indicator toe te voegen (bv. 🎾 voor een racket). De app geeft altijd voorrang aan de image bestandsreferentie en valt terug op emoji.
Categoriefiltering Zelfs in een informatieve modus helpt categoriefiltering leden snel het juiste producttype te vinden. De filterlogica werkt client-side op de geladen productlijst — geen extra API-aanroepen per categorie.
Voorraad bijhouden voor toekomstige aankopen
Het stock-veld is al aanwezig in het schema zodat een toekomstige aankoopflow de beschikbaarheid correct kan communiceren zonder een schema-migratie.