Files
route-commerce/supabase/migrations/119_regenerate_headgate_token_brand.sql
T

31 lines
989 B
PL/PgSQL

-- Migration 119: Add brand_id to regenerate_headgate_token for ownership enforcement
CREATE OR REPLACE FUNCTION regenerate_headgate_token(p_headgate_id UUID, p_brand_id UUID)
RETURNS JSONB
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
v_new_token UUID;
v_headgate_brand_id UUID;
BEGIN
-- Verify headgate exists and belongs to brand
SELECT brand_id INTO v_headgate_brand_id
FROM water_headgates
WHERE id = p_headgate_id AND deleted_at IS NULL;
IF NOT FOUND THEN
RETURN jsonb_build_object('success', false, 'error', 'Headgate not found');
END IF;
-- Brand scoping: if brand_id is not null, enforce ownership
IF p_brand_id IS NOT NULL AND v_headgate_brand_id != p_brand_id THEN
RETURN jsonb_build_object('success', false, 'error', 'Not authorized');
END IF;
v_new_token := gen_random_uuid();
UPDATE water_headgates SET headgate_token = v_new_token WHERE id = p_headgate_id;
RETURN jsonb_build_object('success', true, 'token', v_new_token);
END;
$$;