summaryrefslogtreecommitdiff
path: root/src/db/rest/media/_api_serve_user_or_default_media.sql
blob: 08f6483520646fb41df671900592454006f0dfd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
CREATE FUNCTION _api.serve_user_or_default_media(
	_user_id INTEGER,
	_type xssbook.user_media_type,
	_default TEXT
)
RETURNS sys."*/*"
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_media_id INTEGER;
BEGIN

	SELECT id
	FROM xssbook.user_media m
	WHERE m.type = _type
	AND m.user_id = _user_id
	INTO _media_id;

	IF FOUND THEN
		RETURN _api.serve_user_media(_media_id);
	END IF;

	SELECT id
	FROM xssbook.media m
	WHERE m.name = _default
	INTO _media_id;

	IF FOUND THEN
		RETURN _api.serve_system_media(_media_id);
	END IF;

	PERFORM _api_raise_not_found();
END
$BODY$;

GRANT EXECUTE ON FUNCTION _api.serve_user_or_default_media(INTEGER, xssbook.user_media_type, TEXT)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE xssbook.user_media
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE xssbook.media
	TO rest_anon, rest_user;