Annotation: policy.save_menu_policy

CREATE OR REPLACE FUNCTION policy.save_menu_policy(_user_id integer, _office_id integer, _menu_ids integer[])
RETURNS void

Information: policy.save_menu_policy

Schema policy
Function Name save_menu_policy
Arguments _user_id integer, _office_id integer, _menu_ids integer[]
Owner postgres
Result Type void
Description

Implementation: policy.save_menu_policy

CREATE OR REPLACE FUNCTION policy.save_menu_policy(_user_id integer, _office_id integer, _menu_ids integer[])
 RETURNS void
 LANGUAGE plpgsql
AS $function$
BEGIN
    DELETE FROM policy.menu_access
    WHERE NOT policy.menu_access.menu_id = ANY(_menu_ids)
    AND user_id = _user_id
    AND office_id = _office_id;

    WITH menus
    AS
    (
        SELECT explode_array(_menu_ids) AS _menu_id
    )
    
    INSERT INTO policy.menu_access(user_id, office_id, menu_id)
    SELECT _user_id, _office_id, _menu_id
    FROM menus
    WHERE _menu_id NOT IN
    (
        SELECT menu_id
        FROM policy.menu_access
        WHERE policy.menu_access.user_id = _user_id
        AND policy.menu_access.office_id = _office_id
    );

    RETURN;
END
$function$