Files
acmcc/supabase/migrations/20260325013325_71291eaa-9262-4339-bbc7-ff1166ad403d.sql
T
2026-06-01 20:19:26 -04:00

80 lines
2.9 KiB
SQL

-- Amenities table
CREATE TABLE public.amenities (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
association_id UUID REFERENCES public.associations(id) ON DELETE CASCADE NOT NULL,
name TEXT NOT NULL,
description TEXT,
amenity_type TEXT NOT NULL DEFAULT 'info',
cover_image_url TEXT,
map_config JSONB DEFAULT '{}'::jsonb,
booking_config JSONB DEFAULT '{}'::jsonb,
form_fields JSONB DEFAULT '[]'::jsonb,
is_active BOOLEAN NOT NULL DEFAULT true,
sort_order INTEGER DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
ALTER TABLE public.amenities ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Staff can manage amenities" ON public.amenities
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager') OR public.has_role(auth.uid(), 'employee'));
CREATE POLICY "Public can view active amenities" ON public.amenities
FOR SELECT TO anon
USING (is_active = true);
CREATE POLICY "Authenticated can view active amenities" ON public.amenities
FOR SELECT TO authenticated
USING (is_active = true);
-- Amenity booking requests
CREATE TABLE public.amenity_bookings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
amenity_id UUID REFERENCES public.amenities(id) ON DELETE CASCADE NOT NULL,
association_id UUID REFERENCES public.associations(id) ON DELETE CASCADE NOT NULL,
guest_name TEXT NOT NULL,
guest_email TEXT,
guest_phone TEXT,
booking_date DATE NOT NULL,
start_time TEXT,
end_time TEXT,
notes TEXT,
status TEXT NOT NULL DEFAULT 'pending',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
ALTER TABLE public.amenity_bookings ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Staff can manage bookings" ON public.amenity_bookings
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager') OR public.has_role(auth.uid(), 'employee'));
CREATE POLICY "Anon can insert bookings" ON public.amenity_bookings
FOR INSERT TO anon
WITH CHECK (true);
-- Amenity form submissions
CREATE TABLE public.amenity_form_submissions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
amenity_id UUID REFERENCES public.amenities(id) ON DELETE CASCADE NOT NULL,
association_id UUID REFERENCES public.associations(id) ON DELETE CASCADE NOT NULL,
submitter_name TEXT,
submitter_email TEXT,
form_data JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
ALTER TABLE public.amenity_form_submissions ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Staff can view form submissions" ON public.amenity_form_submissions
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager') OR public.has_role(auth.uid(), 'employee'));
CREATE POLICY "Anon can insert form submissions" ON public.amenity_form_submissions
FOR INSERT TO anon
WITH CHECK (true);