Relaties & ERD
Diagram
Section titled βDiagramβclients βββ dogs (1:N β één klant heeft meerdere honden) β βββ vaccinations (1:N β één hond heeft meerdere vaccins) β βββ bundles (1:N β één hond heeft meerdere bundels) β β βββ bundle_usage (1:N β één bundel heeft meerdere gebruiksmomenten) β β βββ training_lessons (1:N β één bundel heeft meerdere lessen) β βββ room_assignments (1:N β één hond heeft meerdere kamertoewijzingen) β βββ bookings (1:N β één klant heeft meerdere boekingen) β βββ booking_dogs (1:N β één boeking heeft meerdere honden) β β βββ dogs (N:1) β β βββ services (N:1) β β βββ bundle_usage (1:1 optioneel β indien strippenkaart) β βββ room_assignments (1:N β één boeking heeft meerdere kamertoewijzingen) β βββ subscriptions (1:N β één klant heeft meerdere abonnementen) βββ subscription_invoices (1:N)
rooms βββ room_assignments (1:N β één kamer heeft meerdere toewijzingen over tijd)
payments βββ bookings (N:1 optioneel) βββ bundles (N:1 optioneel) βββ subscription_invoices (N:1 optioneel)Relaties in detail
Section titled βRelaties in detailβKlant β Honden
Section titled βKlant β Hondenβdogs.client_id β clients.idEen klant kan meerdere honden hebben. Alle honden van één klant kunnen in één boeking worden opgenomen.
Boeking β Honden (via booking_dogs)
Section titled βBoeking β Honden (via booking_dogs)βbooking_dogs.booking_id β bookings.idbooking_dogs.dog_id β dogs.idbooking_dogs.service_id β services.idEen boeking bevat één of meer honden. Iedere hond in een boeking heeft een eigen dienst en prijs (snapshot op moment van boeking).
Bundel β Gebruik (via bundle_usage)
Section titled βBundel β Gebruik (via bundle_usage)βbundle_usage.bundle_id β bundles.idbundle_usage.booking_id β bookings.idIedere keer dat een klant incheckt met een strippenkaart, wordt een bundle_usage record aangemaakt en de used_credits in bundles verhoogd.
Abonnement β Facturen
Section titled βAbonnement β Facturenβsubscription_invoices.subscription_id β subscriptions.idPer maand wordt automatisch een subscription_invoice aangemaakt door de cron job.
Kamer β Toewijzing (via room_assignments)
Section titled βKamer β Toewijzing (via room_assignments)βroom_assignments.room_id β rooms.idroom_assignments.booking_id β bookings.idroom_assignments.dog_id β dogs.idroom_assignments.assigned_by β users.idBij check-in wordt een hond toegewezen aan een specifieke kamer. Het systeem houdt bij welke hond in welke kamer zit en tot wanneer. Dit maakt het mogelijk om kamerbezetting real-time te tonen op het dashboard.
Betaling β Meerdere bronnen
Section titled βBetaling β Meerdere bronnenβEen betaling kan gekoppeld zijn aan:
- Een reguliere boeking (
booking_id) - Een bundel aankoop (
bundle_id) - Een maandelijkse abonnementsfactuur (
subscription_invoice_id)
Precies één van deze drie velden is ingevuld per betaling.
Supabase Row Level Security (RLS)
Section titled βSupabase Row Level Security (RLS)βIedere tabel heeft RLS policies zodat klanten alleen hun eigen data kunnen zien.
-- Voorbeeld: klant ziet alleen eigen hondenCREATE POLICY "Klant ziet eigen honden"ON dogs FOR SELECTUSING (client_id = auth.uid());
-- Admin ziet allesCREATE POLICY "Admin ziet alle honden"ON dogs FOR SELECTUSING ( EXISTS ( SELECT 1 FROM users WHERE users.id = auth.uid() AND users.role IN ('admin', 'medewerker') ));