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>
53 lines
3.1 KiB
PL/PgSQL
53 lines
3.1 KiB
PL/PgSQL
ALTER TABLE public.amenity_bookings
|
|
ADD COLUMN IF NOT EXISTS is_public_event boolean NOT NULL DEFAULT false,
|
|
ADD COLUMN IF NOT EXISTS event_title text,
|
|
ADD COLUMN IF NOT EXISTS event_description text,
|
|
ADD COLUMN IF NOT EXISTS payment_status text NOT NULL DEFAULT 'none',
|
|
ADD COLUMN IF NOT EXISTS payment_amount_cents integer NOT NULL DEFAULT 0,
|
|
ADD COLUMN IF NOT EXISTS payment_link_url text,
|
|
ADD COLUMN IF NOT EXISTS payment_paid_at timestamptz,
|
|
ADD COLUMN IF NOT EXISTS signed_documents jsonb NOT NULL DEFAULT '[]'::jsonb;
|
|
|
|
ALTER TABLE public.amenities
|
|
ADD COLUMN IF NOT EXISTS signable_documents jsonb NOT NULL DEFAULT '[]'::jsonb;
|
|
|
|
DROP FUNCTION IF EXISTS public.get_public_amenity_booked_dates(uuid);
|
|
|
|
CREATE FUNCTION public.get_public_amenity_booked_dates(p_amenity_id uuid)
|
|
RETURNS TABLE(booking_date date, start_time text, end_time text, status text, is_public_event boolean, event_title text)
|
|
LANGUAGE sql
|
|
STABLE SECURITY DEFINER
|
|
SET search_path TO 'public'
|
|
AS $$
|
|
SELECT ab.booking_date, ab.start_time, ab.end_time, ab.status,
|
|
COALESCE(ab.is_public_event, false) AS is_public_event,
|
|
CASE WHEN COALESCE(ab.is_public_event, false) THEN COALESCE(ab.event_title, ab.title) ELSE NULL END AS event_title
|
|
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')
|
|
$$;
|
|
|
|
INSERT INTO storage.buckets (id, name, public)
|
|
VALUES ('amenity-documents', 'amenity-documents', true)
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
DO $$ BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='storage' AND tablename='objects' AND policyname='Public read amenity-documents') THEN
|
|
CREATE POLICY "Public read amenity-documents" ON storage.objects FOR SELECT
|
|
USING (bucket_id = 'amenity-documents');
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='storage' AND tablename='objects' AND policyname='Staff manage amenity-documents') THEN
|
|
CREATE POLICY "Staff manage amenity-documents" ON storage.objects FOR ALL TO authenticated
|
|
USING (bucket_id = 'amenity-documents' AND (public.has_role(auth.uid(),'admin'::public.app_role) OR public.has_role(auth.uid(),'manager'::public.app_role) OR public.has_role(auth.uid(),'employee'::public.app_role)))
|
|
WITH CHECK (bucket_id = 'amenity-documents' AND (public.has_role(auth.uid(),'admin'::public.app_role) OR public.has_role(auth.uid(),'manager'::public.app_role) OR public.has_role(auth.uid(),'employee'::public.app_role)));
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='storage' AND tablename='objects' AND policyname='Anyone upload signed amenity-documents') THEN
|
|
CREATE POLICY "Anyone upload signed amenity-documents" ON storage.objects FOR INSERT TO anon, authenticated
|
|
WITH CHECK (bucket_id = 'amenity-documents' AND (storage.foldername(name))[1] = 'signed');
|
|
END IF;
|
|
END $$; |