mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 01:40:01 +00:00
183fe0a93c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
64 lines
2.1 KiB
PL/PgSQL
64 lines
2.1 KiB
PL/PgSQL
-- Public-safe RPCs for amenity calendar visibility and booking lookup
|
|
|
|
-- 1) Return confirmed/blocked bookings for an amenity, exposing only safe fields
|
|
CREATE OR REPLACE FUNCTION public.get_public_amenity_booked_dates(p_amenity_id uuid)
|
|
RETURNS TABLE(booking_date date, start_time text, end_time text, status text)
|
|
LANGUAGE sql
|
|
STABLE SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
SELECT ab.booking_date, ab.start_time, ab.end_time, ab.status
|
|
FROM public.amenity_bookings ab
|
|
JOIN public.amenities a ON a.id = ab.amenity_id
|
|
JOIN public.association_public_pages app ON app.association_id = a.association_id
|
|
WHERE ab.amenity_id = p_amenity_id
|
|
AND a.is_active = true
|
|
AND app.is_published = true
|
|
AND ab.status IN ('confirmed', 'approved', 'blocked')
|
|
AND ab.booking_date >= (CURRENT_DATE - INTERVAL '7 days')
|
|
$$;
|
|
|
|
GRANT EXECUTE ON FUNCTION public.get_public_amenity_booked_dates(uuid) TO anon, authenticated;
|
|
|
|
-- 2) Look up a single booking for the public confirmation page
|
|
CREATE OR REPLACE FUNCTION public.get_public_booking_confirmation(p_booking_id uuid)
|
|
RETURNS TABLE(
|
|
id uuid,
|
|
guest_name text,
|
|
guest_email text,
|
|
booking_date date,
|
|
start_time text,
|
|
end_time text,
|
|
status text,
|
|
title text,
|
|
amenity_name text,
|
|
association_name text,
|
|
association_slug text
|
|
)
|
|
LANGUAGE sql
|
|
STABLE SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
SELECT
|
|
ab.id,
|
|
ab.guest_name,
|
|
ab.guest_email,
|
|
ab.booking_date,
|
|
ab.start_time,
|
|
ab.end_time,
|
|
ab.status,
|
|
ab.title,
|
|
a.name AS amenity_name,
|
|
assoc.name AS association_name,
|
|
app.slug AS association_slug
|
|
FROM public.amenity_bookings ab
|
|
JOIN public.amenities a ON a.id = ab.amenity_id
|
|
JOIN public.associations assoc ON assoc.id = ab.association_id
|
|
LEFT JOIN public.association_public_pages app ON app.association_id = ab.association_id
|
|
WHERE ab.id = p_booking_id
|
|
$$;
|
|
|
|
GRANT EXECUTE ON FUNCTION public.get_public_booking_confirmation(uuid) TO anon, authenticated;
|
|
|
|
-- 3) Allow status='blocked' as a valid booking_type-independent status used by admin manual blocks
|
|
-- (no constraint exists on status, so nothing to change) |