mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 09:50:01 +00:00
Add ACMCC app source, Supabase backend, and project config
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
|
||||
-- Add request_type and attachments columns to client_requests
|
||||
ALTER TABLE public.client_requests
|
||||
ADD COLUMN IF NOT EXISTS request_type text,
|
||||
ADD COLUMN IF NOT EXISTS attachments jsonb NOT NULL DEFAULT '[]'::jsonb;
|
||||
|
||||
-- Allow authenticated users (clients/homeowners) to insert their own requests
|
||||
DROP POLICY IF EXISTS "Authenticated users can submit client requests" ON public.client_requests;
|
||||
CREATE POLICY "Authenticated users can submit client requests"
|
||||
ON public.client_requests
|
||||
FOR INSERT
|
||||
TO authenticated
|
||||
WITH CHECK (true);
|
||||
|
||||
-- Allow users to view their own submitted requests by email
|
||||
DROP POLICY IF EXISTS "Users can view their own submitted requests" ON public.client_requests;
|
||||
CREATE POLICY "Users can view their own submitted requests"
|
||||
ON public.client_requests
|
||||
FOR SELECT
|
||||
TO authenticated
|
||||
USING (
|
||||
has_role(auth.uid(), 'admin'::app_role)
|
||||
OR has_role(auth.uid(), 'manager'::app_role)
|
||||
OR requester_email = (SELECT email FROM auth.users WHERE id = auth.uid())
|
||||
);
|
||||
|
||||
-- Trigger function: notify all admin/manager users when a new client request is submitted
|
||||
CREATE OR REPLACE FUNCTION public.notify_staff_on_client_request()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path TO 'public'
|
||||
AS $$
|
||||
DECLARE
|
||||
staff_user RECORD;
|
||||
v_message text;
|
||||
BEGIN
|
||||
v_message := COALESCE(NEW.requester_name, 'A client')
|
||||
|| ' submitted a '
|
||||
|| COALESCE(NEW.request_type, 'request')
|
||||
|| ': ' || NEW.title;
|
||||
|
||||
FOR staff_user IN
|
||||
SELECT DISTINCT user_id
|
||||
FROM public.user_roles
|
||||
WHERE role IN ('admin'::app_role, 'manager'::app_role)
|
||||
LOOP
|
||||
INSERT INTO public.in_app_notifications
|
||||
(user_id, type, title, message, related_item_id, related_item_type, link)
|
||||
VALUES (
|
||||
staff_user.user_id,
|
||||
'client_request_submitted',
|
||||
'New Client Request',
|
||||
v_message,
|
||||
NEW.id,
|
||||
'client_request',
|
||||
'/dashboard/client-requests'
|
||||
);
|
||||
END LOOP;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_notify_staff_on_client_request ON public.client_requests;
|
||||
CREATE TRIGGER trg_notify_staff_on_client_request
|
||||
AFTER INSERT ON public.client_requests
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.notify_staff_on_client_request();
|
||||
Reference in New Issue
Block a user