CREATE FUNCTION _api.serve_media(
	_name TEXT
)
RETURNS sys."*/*"
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_headers TEXT;
	_data BYTEA;
BEGIN

	SELECT FORMAT(
      '[{"Content-Type": "%s"},'
       '{"Content-Disposition": "inline; filename=\"%s\""},'
       '{"Cache-Control": "max-age=259200"}]'
      ,	m.type, m.name)
	FROM admin.media m
	WHERE m.name = _name INTO _headers;

	PERFORM SET_CONFIG('response.headers', _headers, true);

	SELECT m.content
	FROM admin.media m
	WHERE m.name = _name
	INTO _data;

	IF FOUND THEN
		RETURN(_data);
	ELSE
		PERFORM _api.raise(
			_msg => 'api_not_found',
			_err => 404
		);
	END IF;
END
$BODY$;

GRANT EXECUTE ON FUNCTION _api.serve_media(TEXT)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE admin.media
	TO rest_anon, rest_user;
