CREATE FUNCTION api.profile_avatar( user_id INTEGER DEFAULT 0 ) RETURNS sys."*/*" LANGUAGE plpgsql VOLATILE AS $BODY$ DECLARE _id INTEGER; _mod INTEGER; _name TEXT; BEGIN SELECT media_id INTO _id FROM admin.user_media m WHERE m.user_id = profile_avatar.user_id AND type = 'avatar'::admin.user_media_type; -- get default if not exists IF NOT FOUND THEN _mod = MOD(user_id, 24); _name = 'default_avatar_' || _mod || '.png'; SELECT id INTO _id FROM admin.media WHERE name = _name; END IF; RETURN _api.serve_media(_id); END $BODY$; GRANT EXECUTE ON FUNCTION api.profile_avatar(INTEGER) TO rest_anon, rest_user; GRANT SELECT ON TABLE admin.user_media TO rest_anon, rest_user; GRANT SELECT ON TABLE admin.media TO rest_anon, rest_user;