Courts & booking
Court register, booking calendar, opening hours and pricing for the venue. Shared view for boulodrome and club — same court model. Double booking is impossible at the data level (409 court_double_booked).
6
Courts
3
Free now
31
Bookings today
92%
Occupancy tonight
Court register · GET /v1/venues/{id}/courts
| No. | Name | Dimensions | Surface | Indoor | Lighting | Heating | Status now | |
|---|---|---|---|---|---|---|---|---|
| 1 | Centre | 15×4 | synthetic | yes | yes | yes | Free | ✎ · 🗑 |
| 2 | — | 15×4 | synthetic | yes | yes | no | Booked | ✎ · 🗑 |
| 3 | — | 15×4 | gravel | yes | no | no | Maintenance | ✎ · 🗑 |
| 4 | — | 15×4 | synthetic | yes | yes | no | Allocated | ✎ · 🗑 |
| 5 | — | 15×4 | synthetic | yes | yes | no | Free | ✎ · 🗑 |
| 6 | — | 15×4 | gravel | yes | yes | no | Free | ✎ · 🗑 |
Booking calendar — per-court timeline · competition allocation blocks slots
Booking Walk-in Recurring Competition allocation Maintenance
Court \ time
08:00
10:00
12:00
14:00
16:00
18:00
20:00
Court 1
18–19 · Anna Lind
Court 2
18–19:30 · Walk-in · Jonas
Court 3
Maintenance — surface repair
Court 4
District Championship Doubles (allocated)
Court 5
19–20 recurring · Nordviks BK
Court 6
New booking — POST …/bookings (all fields)
Auto-calculated fee: SEK 90 (60 member + 30 lighting · booking_fee_minor + amenity_fee_minor)
Opening hours — controls bookable times · opening_hours (JSONB, read as a unit)
| Day | Open | Opens | Closes | |
|---|---|---|---|---|
| Monday | + Exception (public holiday / special hours) | |||
| Tuesday | + Exception (public holiday / special hours) | |||
| Wednesday | + Exception (public holiday / special hours) | |||
| Thursday | + Exception (public holiday / special hours) | |||
| Friday | + Exception (public holiday / special hours) | |||
| Saturday | + Exception (public holiday / special hours) | |||
| Sunday | + Exception (public holiday / special hours) |
A date override (closed / changed hours / lunch break) always wins over the weekly schedule — the most specific rule applies.
Pricing — court_pricing · amounts as *_minor bigint + currency
Cancellation policy — cancellation_policy (JSONB)
Mutations carry ETag/If-Match — wrong version → 412 stale_version.
Shared screen: boulodrome and club use the same court model — the club typically sees fewer courts and uses recurring series (club training), the hall runs commercial rates with member/guest pricing and walk-ins. QR check-in per booking confirms the slot (check_in_token).