mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 09:50:01 +00:00
183fe0a93c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
2.4 KiB
SQL
70 lines
2.4 KiB
SQL
ALTER TABLE public.amenity_bookings
|
|
ADD COLUMN IF NOT EXISTS booking_type TEXT NOT NULL DEFAULT 'rental',
|
|
ADD COLUMN IF NOT EXISTS title TEXT,
|
|
ADD COLUMN IF NOT EXISTS end_time TIME WITHOUT TIME ZONE,
|
|
ADD COLUMN IF NOT EXISTS location TEXT,
|
|
ADD COLUMN IF NOT EXISTS form_data JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
ADD COLUMN IF NOT EXISTS created_by UUID;
|
|
|
|
ALTER TABLE public.amenity_bookings
|
|
DROP CONSTRAINT IF EXISTS amenity_bookings_booking_type_check;
|
|
|
|
ALTER TABLE public.amenity_bookings
|
|
ADD CONSTRAINT amenity_bookings_booking_type_check
|
|
CHECK (booking_type IN ('rental', 'meeting'));
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_amenity_bookings_assoc_type_date
|
|
ON public.amenity_bookings (association_id, booking_type, booking_date);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_amenity_bookings_amenity_date
|
|
ON public.amenity_bookings (amenity_id, booking_date);
|
|
|
|
ALTER TABLE public.amenity_bookings ENABLE ROW LEVEL SECURITY;
|
|
|
|
DROP POLICY IF EXISTS "Staff can manage amenity bookings" ON public.amenity_bookings;
|
|
DROP POLICY IF EXISTS "Association users can view amenity bookings" ON public.amenity_bookings;
|
|
DROP POLICY IF EXISTS "Public can create amenity booking requests" ON public.amenity_bookings;
|
|
|
|
CREATE POLICY "Staff can manage amenity bookings"
|
|
ON public.amenity_bookings
|
|
FOR ALL
|
|
TO authenticated
|
|
USING (
|
|
public.has_role(auth.uid(), 'admin'::public.app_role)
|
|
OR public.has_role(auth.uid(), 'manager'::public.app_role)
|
|
)
|
|
WITH CHECK (
|
|
public.has_role(auth.uid(), 'admin'::public.app_role)
|
|
OR public.has_role(auth.uid(), 'manager'::public.app_role)
|
|
);
|
|
|
|
CREATE POLICY "Association users can view amenity bookings"
|
|
ON public.amenity_bookings
|
|
FOR SELECT
|
|
TO authenticated
|
|
USING (
|
|
association_id IN (SELECT public.get_user_association_ids())
|
|
OR public.has_role(auth.uid(), 'admin'::public.app_role)
|
|
OR public.has_role(auth.uid(), 'manager'::public.app_role)
|
|
);
|
|
|
|
CREATE POLICY "Public can create amenity booking requests"
|
|
ON public.amenity_bookings
|
|
FOR INSERT
|
|
TO anon, authenticated
|
|
WITH CHECK (
|
|
EXISTS (
|
|
SELECT 1
|
|
FROM public.amenities a
|
|
WHERE a.id = amenity_bookings.amenity_id
|
|
AND a.association_id = amenity_bookings.association_id
|
|
AND a.is_active = true
|
|
AND a.amenity_type IN ('booking', 'rental_calendar', 'meeting_calendar')
|
|
)
|
|
);
|
|
|
|
DROP TRIGGER IF EXISTS update_amenity_bookings_updated_at ON public.amenity_bookings;
|
|
CREATE TRIGGER update_amenity_bookings_updated_at
|
|
BEFORE UPDATE ON public.amenity_bookings
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.update_updated_at_column(); |