feat(api): keyless unavailable-ranges feed for the guest calendar
GET /api/v1/public/rooms/{id}/unavailable?start=&end= and its RPC twin
chatelet_room_unavailable return the nights a guest cannot book over a
window (default today → +365 d, capped at 400 d): occupying bookings —
live holds included, so the feed always agrees with POST /availability —
and manual blocks, clipped, sorted and coalesced into anonymous half-open
spans. Adjacent spans merge on purpose so a guest cannot tell where one
occupant's dates end and the next begin, nor a block from a stay.
is_available now uses the OCCUPYING_STATUSES constant it was inlining.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
64607a00bc
commit
feaaef93e3
8 changed files with 278 additions and 8 deletions
|
|
@ -73,6 +73,7 @@ def chatelet_start():
|
|||
handle_room_list,
|
||||
handle_room_list_mine,
|
||||
handle_room_publish,
|
||||
handle_room_unavailable,
|
||||
handle_room_update,
|
||||
resolve_chatelet_owner,
|
||||
)
|
||||
|
|
@ -86,6 +87,7 @@ def chatelet_start():
|
|||
# public (discovery + guest booking)
|
||||
register_rpc("chatelet_room_list", handle_room_list, AUTH_NONE)
|
||||
register_rpc("chatelet_room_get", handle_room_get, AUTH_NONE)
|
||||
register_rpc("chatelet_room_unavailable", handle_room_unavailable, AUTH_NONE)
|
||||
register_rpc("chatelet_availability", handle_availability, AUTH_NONE)
|
||||
register_rpc("chatelet_booking_request", handle_booking_request, AUTH_NONE)
|
||||
register_rpc("chatelet_booking_get", handle_booking_get, AUTH_NONE)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue