Files
diplom/migrations/20250517190855_util.sql
2025-05-17 23:52:20 +03:00

35 lines
1.1 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION get_users_that_can_see_user(target_user_id UUID)
RETURNS TABLE (user_id UUID) AS $$
BEGIN
RETURN QUERY
-- Users directly related to the target user
SELECT ur.user_id
FROM user_relation ur
WHERE ur.other_id = target_user_id
UNION
-- Users where target user is related to them
SELECT ur.other_id AS user_id
FROM user_relation ur
WHERE ur.user_id = target_user_id
UNION
-- Users who share a server with the target user
SELECT sm.user_id
FROM server_member sm
JOIN server_member sm2 ON sm.server_id = sm2.server_id
WHERE sm2.user_id = target_user_id
AND sm.user_id != target_user_id
UNION
-- Users who share a channel with the target user (DM or group)
SELECT cr.user_id
FROM channel_recipient cr
JOIN channel_recipient cr2 ON cr.channel_id = cr2.channel_id
WHERE cr2.user_id = target_user_id
AND cr.user_id != target_user_id;
END;
$$ LANGUAGE plpgsql;