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.1 KiB
PL/PgSQL
70 lines
2.1 KiB
PL/PgSQL
|
|
-- 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();
|