7676
7777-- config_access_summary
7878DROP VIEW IF EXISTS config_access_summary_by_user;
79+ DROP VIEW IF EXISTS config_access_summary_by_group;
7980DROP VIEW IF EXISTS config_access_summary_by_config;
8081DROP VIEW IF EXISTS config_access_summary;
8182
@@ -122,22 +123,45 @@ SELECT
122123 COUNT (DISTINCT config_access_summary." role" ) as distinct_roles,
123124 COUNT (DISTINCT config_access_summary .config_id ) as distinct_configs,
124125 MAX (config_access_summary .last_signed_in_at ) as last_signed_in_at,
125- MAX (config_access_summary .created_at ) as latest_grant
126+ MAX (config_access_summary .created_at ) as latest_grant,
127+ ARRAY_AGG(DISTINCT config_access_summary .config_type ORDER BY config_access_summary .config_type )
128+ FILTER (WHERE config_access_summary .config_type IS NOT NULL ) as config_types
126129FROM config_access_summary
130+ WHERE config_access_summary .external_user_id IS NOT NULL
127131GROUP BY config_access_summary .external_user_id , config_access_summary." user" , config_access_summary .email ;
128132
133+ -- config_access_summary_by_group
134+ CREATE VIEW config_access_summary_by_group AS
135+ SELECT
136+ config_access_summary .external_group_id as external_group_id,
137+ external_groups .name as " group" ,
138+ COUNT (* ) as access_count,
139+ COUNT (DISTINCT config_access_summary .external_user_id ) as distinct_users,
140+ COUNT (DISTINCT config_access_summary." role" ) as distinct_roles,
141+ COUNT (DISTINCT config_access_summary .config_id ) as distinct_configs,
142+ MAX (config_access_summary .last_signed_in_at ) as last_signed_in_at,
143+ MAX (config_access_summary .created_at ) as latest_grant,
144+ ARRAY_AGG(DISTINCT config_access_summary .config_type ORDER BY config_access_summary .config_type )
145+ FILTER (WHERE config_access_summary .config_type IS NOT NULL ) as config_types
146+ FROM config_access_summary
147+ JOIN external_groups ON config_access_summary .external_group_id = external_groups .id
148+ WHERE config_access_summary .external_group_id IS NOT NULL
149+ GROUP BY config_access_summary .external_group_id , external_groups .name ;
150+
129151-- config_access_filter_options
130152-- Returns distinct values for all filter dropdowns in a single call.
131153-- Each facet excludes its own filter parameter so that selecting a value
132154-- in one dropdown does not remove it from its own option list (faceted search).
133- DROP FUNCTION IF EXISTS config_access_filter_options;
155+ DROP FUNCTION IF EXISTS config_access_filter_options(uuid, text , uuid, text , text );
156+ DROP FUNCTION IF EXISTS config_access_filter_options(uuid, text , uuid, text , text , uuid);
134157
135158CREATE OR REPLACE FUNCTION config_access_filter_options (
136159 p_config_id uuid DEFAULT NULL ,
137160 p_config_type text DEFAULT NULL ,
138161 p_user_id uuid DEFAULT NULL ,
139162 p_role text DEFAULT NULL ,
140- p_user_type text DEFAULT NULL
163+ p_user_type text DEFAULT NULL ,
164+ p_group_id uuid DEFAULT NULL
141165) RETURNS jsonb AS $$
142166SELECT jsonb_build_object(
143167 ' catalogs' , COALESCE((
@@ -147,6 +171,7 @@ SELECT jsonb_build_object(
147171 FROM config_access_summary
148172 WHERE (p_config_type IS NULL OR config_type = p_config_type)
149173 AND (p_user_id IS NULL OR external_user_id = p_user_id)
174+ AND (p_group_id IS NULL OR external_group_id = p_group_id)
150175 AND (p_role IS NULL OR " role" = p_role)
151176 AND (p_user_type IS NULL OR user_type = p_user_type)
152177 ORDER BY config_name
@@ -158,14 +183,32 @@ SELECT jsonb_build_object(
158183 FROM (
159184 SELECT DISTINCT external_user_id, " user" , email
160185 FROM config_access_summary
161- WHERE (p_config_id IS NULL OR config_id = p_config_id)
186+ WHERE external_user_id IS NOT NULL
187+ AND (p_config_id IS NULL OR config_id = p_config_id)
162188 AND (p_config_type IS NULL OR config_type = p_config_type)
189+ AND (p_group_id IS NULL OR external_group_id = p_group_id)
163190 AND (p_role IS NULL OR " role" = p_role)
164191 AND (p_user_type IS NULL OR user_type = p_user_type)
165192 ORDER BY " user"
166193 ) sub
167194 ), ' []' ::jsonb),
168195
196+ ' groups' , COALESCE((
197+ SELECT jsonb_agg(to_jsonb(sub))
198+ FROM (
199+ SELECT DISTINCT config_access_summary .external_group_id , external_groups .name AS " group"
200+ FROM config_access_summary
201+ JOIN external_groups ON config_access_summary .external_group_id = external_groups .id
202+ WHERE config_access_summary .external_group_id IS NOT NULL
203+ AND (p_config_id IS NULL OR config_id = p_config_id)
204+ AND (p_config_type IS NULL OR config_type = p_config_type)
205+ AND (p_user_id IS NULL OR external_user_id = p_user_id)
206+ AND (p_role IS NULL OR " role" = p_role)
207+ AND (p_user_type IS NULL OR user_type = p_user_type)
208+ ORDER BY " group"
209+ ) sub
210+ ), ' []' ::jsonb),
211+
169212 ' roles' , COALESCE((
170213 SELECT jsonb_agg(to_jsonb(sub))
171214 FROM (
@@ -175,6 +218,7 @@ SELECT jsonb_build_object(
175218 AND (p_config_id IS NULL OR config_id = p_config_id)
176219 AND (p_config_type IS NULL OR config_type = p_config_type)
177220 AND (p_user_id IS NULL OR external_user_id = p_user_id)
221+ AND (p_group_id IS NULL OR external_group_id = p_group_id)
178222 AND (p_user_type IS NULL OR user_type = p_user_type)
179223 ORDER BY " role"
180224 ) sub
@@ -189,6 +233,7 @@ SELECT jsonb_build_object(
189233 AND (p_config_id IS NULL OR config_id = p_config_id)
190234 AND (p_config_type IS NULL OR config_type = p_config_type)
191235 AND (p_user_id IS NULL OR external_user_id = p_user_id)
236+ AND (p_group_id IS NULL OR external_group_id = p_group_id)
192237 AND (p_role IS NULL OR " role" = p_role)
193238 ORDER BY user_type
194239 ) sub
0 commit comments