summaryrefslogtreecommitdiff
path: root/src/db/rest/util/_api_raise.sql
blob: 5c740c62e4e811bd0eff4461c906d48c5526fe9c (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
42
43
44
45
46
47
48
49
50
CREATE TABLE _api.err_map (
	err		INTEGER,
	pg_err	TEXT
);

ALTER TABLE _api.err_map OWNER TO xssbook;

ALTER TABLE ONLY _api.err_map
	ADD CONSTRAINT err_map_pkey PRIMARY KEY (err);

INSERT INTO _api.err_map (err, pg_err)
VALUES
	(400, 'P0001'),
	(401, '42501'),
	(403, '42501'),
	(404, '42883'),
	(409, '23505'),
	(500, 'XX001');

CREATE FUNCTION _api.raise(
	_msg TEXT DEFAULT '',
	_detail TEXT DEFAULT '',
	_hint TEXT DEFAULT '',
	_err INTEGER DEFAULT 400
)
RETURNS BOOLEAN
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_pg_err TEXT;
BEGIN

	SELECT pg_err INTO _pg_err
		FROM _api.err_map
		WHERE err = _err;

	RAISE EXCEPTION USING
		MESSAGE := _msg,
		DETAIL := _detail,
		HINT := _hint,
		ERRCODE := _pg_err;

	RETURN FALSE;
END
$BODY$;

GRANT SELECT ON TABLE _api.err_map
	TO rest_anon, rest_user;
GRANT EXECUTE ON FUNCTION _api.raise(TEXT, TEXT, TEXT, INTEGER)
	TO rest_anon, rest_user;