CREATE FUNCTION _api.verify_jwt(
	_token TEXT
)
RETURNS INTEGER
LANGUAGE plpgsql VOLATILE
AS $BODY$
DECLARE
	_payload JSON;
	_valid BOOLEAN;
	_jwt_secret TEXT;
	_user_id INTEGER;
BEGIN
	SELECT jwt_secret INTO _jwt_secret
	FROM sys.database_info
	WHERE name = current_database();

	SELECT payload, valid
	INTO _payload, _valid
	FROM public.verify(
		_token,
		_jwt_secret
	);

	IF NOT FOUND THEN
		RETURN NULL;
	END IF;

	IF _valid <> TRUE THEN
		RETURN NULL;
	END IF;

	_user_id = _payload->>'user_id';

	UPDATE admin.user
	SET seen = clock_timestamp()
	WHERE id = _user_id;

	RETURN _user_id;
END
$BODY$;

GRANT EXECUTE ON FUNCTION _api.verify_jwt(TEXT)
	TO rest_anon, rest_user;
GRANT SELECT ON TABLE sys.database_info
	TO rest_anon, rest_user;
GRANT UPDATE ON TABLE admin.user
	TO rest_anon, rest_user;
