From 42480e6e1c748255fee1103ffb72629f699c0f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kudela?= <kudmich@syncad.com> Date: Tue, 24 Sep 2024 09:22:22 +0200 Subject: [PATCH] Delete deprecated hivemind_helpers schema and itd associated functions --- hive/db/schema.py | 17 - hive/db/sql_scripts/common_sql/helpers.sql | 664 ------------------ .../database_api_sql/database_api.sql | 149 ---- hive/db/sql_scripts/hive_api_sql/common.sql | 27 - hive/db/sql_scripts/hive_api_sql/notify.sql | 106 --- 5 files changed, 963 deletions(-) delete mode 100644 hive/db/sql_scripts/common_sql/helpers.sql delete mode 100644 hive/db/sql_scripts/database_api_sql/database_api.sql delete mode 100644 hive/db/sql_scripts/hive_api_sql/common.sql delete mode 100644 hive/db/sql_scripts/hive_api_sql/notify.sql diff --git a/hive/db/schema.py b/hive/db/schema.py index 7666c924d..476c54293 100644 --- a/hive/db/schema.py +++ b/hive/db/schema.py @@ -528,7 +528,6 @@ def setup(db, admin_db): # create schema and aux functions admin_db.query(f'CREATE SCHEMA IF NOT EXISTS {SCHEMA_NAME} AUTHORIZATION {SCHEMA_OWNER_NAME};') - admin_db.query(f'CREATE SCHEMA IF NOT EXISTS hivemind_helpers AUTHORIZATION {SCHEMA_OWNER_NAME};') admin_db.query(f'CREATE SCHEMA IF NOT EXISTS hivemind_endpoints AUTHORIZATION {SCHEMA_OWNER_NAME};') admin_db.query(f'CREATE SCHEMA IF NOT EXISTS hivemind_postgrest_utilities AUTHORIZATION {SCHEMA_OWNER_NAME};') @@ -551,22 +550,6 @@ def setup(db, admin_db): context_detach(db=db) - sqls = [ - f"DROP TYPE IF EXISTS hivemind_helpers.unit_type CASCADE", - f"CREATE TYPE hivemind_helpers.unit_type AS ENUM( 'HBD', 'HIVE', 'VESTS')", - f""" - CREATE TABLE IF NOT EXISTS hivemind_helpers.nai_map - ( - name hivemind_helpers.unit_type NOT NULL, - nai TEXT NOT NULL, - precision INT NOT NULL - ) - """, - f"INSERT INTO hivemind_helpers.nai_map VALUES ('HBD','@@000000013', 3), ('HIVE','@@000000021', 3), ('VESTS','@@000000037', 3)", - ] - for sql in sqls: - db.query(sql) - # default rows sqls = [ f"INSERT INTO {SCHEMA_NAME}.hive_state (last_completed_block_num, db_version) VALUES (1, 0)", diff --git a/hive/db/sql_scripts/common_sql/helpers.sql b/hive/db/sql_scripts/common_sql/helpers.sql deleted file mode 100644 index 64fd61574..000000000 --- a/hive/db/sql_scripts/common_sql/helpers.sql +++ /dev/null @@ -1,664 +0,0 @@ -DROP FUNCTION IF EXISTS hivemind_helpers.valid_account; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_account( - _name TEXT, - allow_empty BOOLEAN DEFAULT FALSE -) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - name_segment TEXT := '[a-z][a-z0-9\-]+[a-z0-9]'; -BEGIN - IF _name IS NULL OR _name = '' THEN - IF NOT allow_empty THEN - RAISE EXCEPTION 'invalid account (not specified)'; - END IF; - - RETURN _name; - END IF; - - IF LENGTH(_name) < 3 OR LENGTH(_name) > 16 THEN - RAISE EXCEPTION 'invalid account name length: ''%''', _name; - END IF; - - IF SUBSTRING(_name FROM 1 FOR 1) = '@' THEN - RAISE EXCEPTION 'invalid account name char ''@'''; - END IF; - - IF _name ~ ('^'|| name_segment ||'(?:\.'|| name_segment ||')*$') THEN - RETURN _name; - ELSE - RAISE EXCEPTION 'invalid account char'; - END IF; - -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_permlink; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_permlink( - _permlink TEXT, - allow_empty BOOLEAN DEFAULT FALSE -) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - IF _permlink IS NULL OR _permlink = '' THEN - IF NOT allow_empty THEN - RAISE EXCEPTION 'permlink cannot be blank'; - END IF; - - RETURN _permlink; - END IF; - - IF LENGTH(_permlink) <= 256 THEN - RETURN _permlink; - ELSE - RAISE EXCEPTION 'invalid permlink length'; - END IF; - -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_sort; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_sort( - _sort TEXT, - allow_empty BOOLEAN DEFAULT FALSE -) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - valid_sorts TEXT[] := ARRAY['trending', 'promoted', 'hot', 'created', 'payout', 'payout_comments', 'muted']; -BEGIN - IF _sort IS NULL OR _sort = '' THEN - IF NOT allow_empty THEN - RAISE EXCEPTION 'sort must be specified'; - END IF; - - RETURN _sort; - END IF; - - IF NOT _sort = ANY(valid_sorts) THEN - RAISE EXCEPTION 'Invalid sort ''%''', _sort; - END IF; - - RETURN _sort; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_tag; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_tag( - _tag TEXT, - allow_empty BOOLEAN DEFAULT FALSE -) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - IF _tag IS NULL OR _tag = '' THEN - IF NOT allow_empty THEN - RAISE EXCEPTION 'tag was blank'; - END IF; - RETURN _tag; - END IF; - - IF NOT _tag ~ '^[a-z0-9-_]+$' THEN - RAISE EXCEPTION 'Invalid tag ''%''', _tag; - END IF; - - RETURN _tag; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_number; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_number( - _num NUMERIC, - default_num INT, - _name TEXT DEFAULT 'integer value', - lbound INT DEFAULT NULL, - ubound INT DEFAULT NULL -) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - validated_num INT; -BEGIN - IF _num IS NULL THEN - IF default_num IS NULL THEN - RAISE EXCEPTION '% must be provided', _name; - ELSE - RETURN default_num; - END IF; - END IF; - - validated_num := _num::INT; - -/* - -- i dont know if its necessary after rewriting - BEGIN - validated_num := _num::INT; - EXCEPTION - WHEN OTHERS THEN - RAISE EXCEPTION '%', SQLERRM; - END; -*/ - - IF lbound IS NOT NULL AND ubound IS NOT NULL THEN - IF NOT (lbound <= validated_num AND validated_num <= ubound) THEN - RAISE EXCEPTION '% = % outside valid range [%:%]', _name, validated_num, lbound, ubound; - END IF; - END IF; - - RETURN validated_num; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.get_hive_accounts_info_view_query_string; -CREATE OR REPLACE FUNCTION hivemind_helpers.get_hive_accounts_info_view_query_string( - _names TEXT[], - lite BOOLEAN DEFAULT FALSE -) - RETURNS SETOF hivemind_app.hive_accounts_info_view - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - -IF lite THEN - RETURN QUERY ( - SELECT - ha.id, - ha.name, - ha.post_count, - ha.created_at, - NULL::timestamp without time zone as active_at, - ha.reputation, - ha.rank, - ha.following, - ha.followers, - ha.lastread_at, - ha.posting_json_metadata, - ha.json_metadata - FROM hivemind_app.hive_accounts_info_view_lite ha - WHERE ha.name = ANY(_names) - ); - -ELSE - RETURN QUERY ( - SELECT - ha.id, - ha.name, - ha.post_count, - ha.created_at, - ha.active_at, - ha.reputation, - ha.rank, - ha.following, - ha.followers, - ha.lastread_at, - ha.posting_json_metadata, - ha.json_metadata - FROM hivemind_app.hive_accounts_info_view ha - WHERE ha.name = ANY(_names) - ); - -END IF; - -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_score; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_score( - _score NUMERIC, - ubound INT, - default_num INT -) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - RETURN hivemind_helpers.valid_number(_score, default_num, 'score', 0, ubound); -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_truncate; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_truncate( - _truncate_body NUMERIC, - ubound INT, - default_num INT -) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - RETURN hivemind_helpers.valid_number(_truncate_body, 0, 'truncate_body'); -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_offset; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_offset( - _offset NUMERIC, - ubound INT -) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - __offset INT := _offset::INT; -BEGIN - IF __offset >= -1 THEN - IF ubound IS NOT NULL AND NOT (__offset <= ubound) THEN - RAISE EXCEPTION 'offset too large'; - END IF; - - RETURN __offset; - ELSE - RAISE EXCEPTION 'offset cannot be negative'; - END IF; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_follow_type; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_follow_type(_follow_type TEXT) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - CASE - WHEN _follow_type = 'blog' THEN - RETURN 1; - WHEN _follow_type = 'ignore' THEN - RETURN 2; - ELSE - RAISE EXCEPTION 'Unsupported follow type, valid types: blog, ignore'; - END CASE; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.valid_date; -CREATE OR REPLACE FUNCTION hivemind_helpers.valid_date( - _date TEXT, - _allow_empty BOOLEAN DEFAULT FALSE -) - RETURNS void - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - IF _date IS NULL OR _date = '' THEN - IF NOT _allow_empty THEN - RAISE EXCEPTION 'Date is blank'; - END IF; - ELSE - BEGIN - PERFORM to_timestamp(_date, 'YYYY-MM-DD HH24:MI:SS'); - RETURN; - EXCEPTION WHEN others THEN - NULL; -- Suppress the exception, continue to the next format check - END; - - BEGIN - PERFORM to_timestamp(_date, 'YYYY-MM-DD"T"HH24:MI:SS'); - RETURN; - EXCEPTION WHEN others THEN - RAISE EXCEPTION 'Date should be in format Y-m-d H:M:S or Y-m-dTH:M:S'; - END; - END IF; -END; -$BODY$ -; - ---If i see correctly to_nai and parse_amount are used only in case when 'value' is '1.001 HIVE' etc - so i skip the nai parsing. -DROP FUNCTION IF EXISTS hivemind_helpers.to_nai; -CREATE OR REPLACE FUNCTION hivemind_helpers.to_nai(_dec_amount NUMERIC, unit hivemind_helpers.unit_type) -RETURNS JSONB -LANGUAGE plpgsql -STABLE -AS -$BODY$ -BEGIN - -RETURN ( -WITH calculate_nai_type AS -( - SELECT ROUND(_dec_amount * (10^(nm.precision))) as amount, nm.nai, nm.precision - FROM hivemind_helpers.nai_map nm - WHERE nm.name = unit - -) - SELECT jsonb_build_object( - 'amount', cnt.amount, - 'nai', cnt.nai, - 'precision', cnt.precision) - FROM calculate_nai_type cnt); - -END; -$BODY$ -; - -DROP TYPE IF EXISTS hivemind_helpers.parse_amount_type CASCADE; -CREATE TYPE hivemind_helpers.parse_amount_type AS ( - dec_amount NUMERIC, - unit hivemind_helpers.unit_type - -); - ---SELECT * FROM hivemind_helpers.parse_amount('1.001 HBD') -DROP FUNCTION IF EXISTS hivemind_helpers.parse_amount; -CREATE OR REPLACE FUNCTION hivemind_helpers.parse_amount( - _value VARCHAR(30) -) -RETURNS hivemind_helpers.parse_amount_type -LANGUAGE plpgsql -STABLE -AS -$BODY$ -DECLARE - unit VARCHAR(5) := split_part(_value, ' ', 2); - dec_amount NUMERIC; -BEGIN - IF unit = 'SBD' THEN - unit := 'HBD'; - ELSIF unit = 'STEEM' THEN - unit := 'HIVE'; - END IF; - unit := unit::hivemind_helpers.unit_type; - dec_amount := split_part(_value, ' ', 1)::NUMERIC; - - RETURN (dec_amount, unit)::hivemind_helpers.parse_amount_type; - -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.database_post_object; -CREATE OR REPLACE FUNCTION hivemind_helpers.database_post_object( - _row hivemind_app.database_api_post, - _truncate_body INT DEFAULT 0 -) -RETURNS JSONB -LANGUAGE plpgsql -STABLE -AS -$BODY$ -DECLARE - post JSONB; - curator_payout hivemind_helpers.parse_amount_type := hivemind_helpers.parse_amount(_row.curator_payout_value); - max_accepted hivemind_helpers.parse_amount_type := hivemind_helpers.parse_amount(_row.max_accepted_payout); -BEGIN - - post := jsonb_build_object( - 'author_rewards', _row.author_rewards, - 'id', _row.id, - 'author', _row.author, - 'permlink', _row.permlink, - 'category', COALESCE(_row.category, 'undefined'), - 'title', _row.title, - 'body', CASE WHEN _truncate_body > 0 THEN LEFT(_row.body, _truncate_body) ELSE _row.body END, - 'json_metadata', _row.json, - 'created', hivemind_helpers.json_date(_row.created_at), - 'last_update', hivemind_helpers.json_date(_row.updated_at), - 'depth', (_row.depth)::INT, - 'children', (_row.children)::INT, - 'last_payout', hivemind_helpers.json_date(_row.last_payout_at), - 'cashout_time', hivemind_helpers.json_date(_row.cashout_time), - 'max_cashout_time', hivemind_helpers.json_date(NULL), - 'curator_payout_value', hivemind_helpers.to_nai(curator_payout.dec_amount, curator_payout.unit), - 'total_payout_value', hivemind_helpers.to_nai((_row.payout - curator_payout.dec_amount), 'HBD'), - 'reward_weight', 10000, - 'root_author', _row.root_author, - 'root_permlink', _row.root_permlink, - 'allow_replies', (_row.allow_replies)::BOOLEAN, - 'allow_votes', (_row.allow_votes)::BOOLEAN, - 'allow_curation_rewards', (_row.allow_curation_rewards)::BOOLEAN, - 'parent_author', _row.parent_author, - 'parent_permlink', _row.parent_permlink_or_category, - 'beneficiaries', _row.beneficiaries, - 'max_accepted_payout', hivemind_helpers.to_nai(max_accepted.dec_amount, max_accepted.unit), - 'percent_hbd', (_row.percent_hbd)::INT, - 'net_votes', (_row.net_votes)::INT - ); - - IF _row.is_paidout::BOOLEAN THEN - post := post || jsonb_build_object( - 'total_vote_weight', 0, - 'vote_rshares', 0, - 'net_rshares', 0, - 'abs_rshares', 0, - 'children_abs_rshares', 0 - ); - ELSE - post := post || jsonb_build_object( - 'total_vote_weight', (_row.total_vote_weight)::BIGINT, - 'vote_rshares', ((_row.rshares)::BIGINT + (_row.abs_rshares)::BIGINT) / 2, - 'net_rshares', (_row.rshares)::BIGINT, - 'abs_rshares', (_row.abs_rshares)::BIGINT, - 'children_abs_rshares', 0 - ); - END IF; - - RETURN post; - -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.notify_type; -CREATE OR REPLACE FUNCTION hivemind_helpers.notify_type(IN _type SMALLINT) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE -BEGIN - CASE - WHEN _type = 1 THEN - RETURN 'new_community'; - WHEN _type = 2 THEN - RETURN 'set_role'; - WHEN _type = 3 THEN - RETURN 'set_props'; - WHEN _type = 4 THEN - RETURN 'set_label'; - WHEN _type = 5 THEN - RETURN 'mute_post'; - WHEN _type = 6 THEN - RETURN 'unmute_post'; - WHEN _type = 7 THEN - RETURN 'pin_post'; - WHEN _type = 8 THEN - RETURN 'unpin_post'; - WHEN _type = 9 THEN - RETURN 'flag_post'; - WHEN _type = 10 THEN - RETURN 'error'; - WHEN _type = 11 THEN - RETURN 'subscribe'; - WHEN _type = 12 THEN - RETURN 'reply'; - WHEN _type = 13 THEN - RETURN 'reply_comment'; - WHEN _type = 14 THEN - RETURN 'reblog'; - WHEN _type = 15 THEN - RETURN 'follow'; - WHEN _type = 16 THEN - RETURN 'mention'; - WHEN _type = 17 THEN - RETURN 'vote'; - ELSE - END CASE; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.render_msg; -CREATE OR REPLACE FUNCTION hivemind_helpers.render_msg(IN _row hivemind_app.notification) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE -BEGIN - CASE - WHEN _row.type_id = 1 THEN - RETURN format('%s was created', - '@' || _row.dst); - WHEN _row.type_id = 2 THEN - RETURN format('%s set %s %s', - '@' || _row.src, - '@' || _row.dst, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 3 THEN - RETURN format('%s set properties %s', - '@' || _row.src, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 4 THEN - RETURN format('%s label %s %s', - '@' || _row.src, - '@' || _row.dst, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 5 THEN - RETURN format('%s mute %s - %s', - '@' || _row.src, - '@' || _row.author || '/' || _row.permlink, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 6 THEN - RETURN format('%s unmute %s - %s', - '@' || _row.src, - '@' || _row.author || '/' || _row.permlink, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 7 THEN - RETURN format('%s pin %s', - '@' || _row.src, - '@' || _row.author || '/' || _row.permlink); - WHEN _row.type_id = 8 THEN - RETURN format('%s unpin %s', - '@' || _row.src, - '@' || _row.author || '/' || _row.permlink); - WHEN _row.type_id = 9 THEN - RETURN format('%s flag %s - %s', - '@' || _row.src, - '@' || _row.author || '/' || _row.permlink, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 10 THEN - RETURN format('error: %s', - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - WHEN _row.type_id = 11 THEN - RETURN format('%s subscribed to %s', - '@' || _row.src, - _row.community_title); - WHEN _row.type_id = 12 THEN - RETURN format('%s replied to your post', - '@' || _row.src); - WHEN _row.type_id = 13 THEN - RETURN format('%s replied to your comment', - '@' || _row.src); - WHEN _row.type_id = 14 THEN - RETURN format('%s reblogged your post', - '@' || _row.src); - WHEN _row.type_id = 15 THEN - RETURN format('%s followed you', - '@' || _row.src); - WHEN _row.type_id = 16 THEN - RETURN format('%s mentioned you and %s others', - '@' || _row.src, - _row.number_of_mentions - 1); - WHEN _row.type_id = 17 THEN - RETURN format('%s voted on your post %s', - '@' || _row.src, - (CASE WHEN _row.payload IS NULL THEN 'null' ELSE _row.payload END)); - ELSE - END CASE; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.render_url; -CREATE OR REPLACE FUNCTION hivemind_helpers.render_url(IN _row hivemind_app.notification) - RETURNS TEXT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE -BEGIN - IF _row.permlink IS NOT NULL AND _row.permlink::TEXT != '' THEN - RETURN '@' || _row.author || '/' || _row.permlink; - END IF; - - IF _row.community IS NOT NULL AND _row.community::TEXT != '' THEN - RETURN 'trending/' || _row.community; - END IF; - - IF _row.src IS NOT NULL AND _row.src::TEXT != '' THEN - RETURN '@' || _row.src; - END IF; - - IF _row.dst IS NOT NULL AND _row.dst::TEXT != '' THEN - RETURN '@' || _row.dst; - END IF; - - RETURN NULL::TEXT; -END; -$BODY$ -; - -DROP FUNCTION IF EXISTS hivemind_helpers.parse_argument; -CREATE FUNCTION hivemind_helpers.parse_argument(_params JSON, _json_type TEXT, _arg_name TEXT, _arg_number INT, _is_bool BOOLEAN = FALSE) -RETURNS TEXT -LANGUAGE 'plpgsql' -AS -$$ -DECLARE - __param TEXT; -BEGIN - SELECT CASE WHEN _json_type = 'object' THEN - _params->>_arg_name - ELSE - _params->>_arg_number - END INTO __param; - - -- TODO: this is done to replicate behaviour of HAfAH python, might remove - IF _is_bool IS TRUE AND __param ~ '([A-Z].+)' THEN - RAISE invalid_text_representation; - ELSE - RETURN __param; - END IF; -END -$$ -; diff --git a/hive/db/sql_scripts/database_api_sql/database_api.sql b/hive/db/sql_scripts/database_api_sql/database_api.sql deleted file mode 100644 index ca46729ff..000000000 --- a/hive/db/sql_scripts/database_api_sql/database_api.sql +++ /dev/null @@ -1,149 +0,0 @@ --- database_api work in progress, started doing hive_api - list_comments probably soon deprecated due to removal of unused api calls -CREATE OR REPLACE FUNCTION hivemind_helpers.list_comments( - IN _start TEXT[], - IN _limit INT, - IN _order TEXT -) - RETURNS JSONB - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - _supported_order_list TEXT[] = ARRAY['by_cashout_time','by_permlink','by_root','by_parent','by_last_update', 'by_author_last_update']; - __limit INT := hivemind_helpers.valid_limit(_limit,1000,1000); - - _valid_time timestamp without time zone; - _author TEXT; - _permlink TEXT; - _start_post_author TEXT; - _start_post_permlink TEXT; -BEGIN -IF _order = 'by_cashout_time' THEN - ASSERT array_length(_start,1) = 3, 'Expecting three arguments in `_start` array: cashout time, optional page _start author and permlink'; - PERFORM hivemind_helpers.valid_date(_start[1]); - - IF SUBSTRING(_start[1] FROM 1 FOR 4) = '1969' THEN - _valid_time = 'infinity'::timestamp without time zone; - ELSE - _valid_time = _start[1]::timestamp without time zone; - END IF; - - _author = hivemind_helpers.valid_account(_start[2], True); - _permlink = hivemind_helpers.valid_permlink(_start[3], True); - - RETURN ( - SELECT json_build_object('comments', - (SELECT (array_agg(row)) FROM ( - SELECT (SELECT * FROM hivemind_helpers.database_post_object((lc.*)::hivemind_app.database_api_post)) FROM hivemind_app.list_comments_by_cashout_time(_valid_time, _author, _permlink, __limit) lc - ) row))); -ELSIF _order = 'by_permlink' THEN - ASSERT array_length(_start,1) = 2, 'Expecting two arguments in `start` array: author and permlink'; - - _author = _start[1]; - _permlink = _start[2]; - - RETURN ( - SELECT json_build_object('comments', - (SELECT (array_agg(row)) FROM ( - WITH comments AS - ( - SELECT (lc.*)::hivemind_app.database_api_post AS database_api_post FROM hivemind_app.list_comments_by_permlink(_author, _permlink, __limit) lc - ) - SELECT hivemind_helpers.database_post_object(database_api_post) FROM comments - ) row))); -ELSIF _order = 'by_root' THEN - ASSERT array_length(_start,1) = 4, 'Expecting 4 arguments in `start` array: discussion root author and permlink, optional page _start author and permlink'; - _author = hivemind_helpers.valid_account(_start[1]); - _permlink = hivemind_helpers.valid_permlink(_start[2]); - _start_post_author = hivemind_helpers.valid_account(_start[3], True); - _start_post_permlink = hivemind_helpers.valid_permlink(_start[4], True); - RETURN ( - SELECT json_build_object('comments', - (SELECT (array_agg(row)) FROM ( - WITH comments AS - ( - SELECT (lc.*)::hivemind_app.database_api_post AS database_api_post FROM hivemind_app.list_comments_by_root(_author, _permlink, _start_post_author, _start_post_permlink, __limit) lc - ) - SELECT * FROM comments c, - LATERAL hivemind_helpers.database_post_object(c.database_api_post) lc - ) row))); -ELSIF _order = 'by_parent' THEN - ASSERT array_length(_start,1) = 4, 'Expecting 4 arguments in `start` array: parent post author and permlink, optional page _start author and permlink'; - _author = hivemind_helpers.valid_account(_start[1]); - _permlink = hivemind_helpers.valid_permlink(_start[2]); - _start_post_author = hivemind_helpers.valid_account(_start[3], True); - _start_post_permlink = hivemind_helpers.valid_permlink(_start[4], True); - RETURN ( - SELECT json_build_object('comments', - (SELECT (array_agg(row)) FROM ( - WITH comments AS - ( - SELECT (lc.*)::hivemind_app.database_api_post AS database_api_post FROM hivemind_app.list_comments_by_parent(_author, _permlink, _start_post_author, _start_post_permlink, __limit) lc - ) - SELECT * FROM comments c, - LATERAL hivemind_helpers.database_post_object(c.database_api_post) lc - ) row))); -ELSIF _order = 'by_last_update' THEN - ASSERT array_length(_start,1) = 4, 'Expecting 4 arguments in `start` array: parent author, update time, optional page _start author and permlink'; - _author = hivemind_helpers.valid_account(_start[1]); - PERFORM hivemind_helpers.valid_date(_start[2]); - _valid_time = _start[2]::timestamp without time zone; - _start_post_author = hivemind_helpers.valid_account(_start[3], True); - _start_post_permlink = hivemind_helpers.valid_permlink(_start[4], True); - RETURN ( - SELECT json_build_object('comments', - (SELECT (array_agg(row)) FROM ( - WITH comments AS - ( - SELECT (lc.*)::hivemind_app.database_api_post AS database_api_post FROM hivemind_app.list_comments_by_last_update(_author, _valid_time, _start_post_author, _start_post_permlink, __limit) lc - ) - SELECT hivemind_helpers.database_post_object(database_api_post) FROM comments - ) row))); -ELSIF _order = 'by_author_last_update' THEN - ASSERT array_length(_start,1) = 4, 'Expecting 4 arguments in `start` array: author, update time, optional page _start author and permlink'; - _author = hivemind_helpers.valid_account(_start[1]); - PERFORM hivemind_helpers.valid_date(_start[2]); - _valid_time = _start[2]::timestamp without time zone; - _start_post_author = hivemind_helpers.valid_account(_start[3], True); - _start_post_permlink = hivemind_helpers.valid_permlink(_start[4], True); - RETURN ( - SELECT json_build_object('comments', - (SELECT (array_agg(row)) FROM ( - WITH comments AS - ( - SELECT (lc.*)::hivemind_app.database_api_post AS database_api_post FROM hivemind_app.list_comments_by_author_last_update(_author, _valid_time, _start_post_author, _start_post_permlink, __limit) lc - ) - SELECT hivemind_helpers.database_post_object(database_api_post) FROM comments - ) row))); -ELSE - RAISE EXCEPTION 'Unsupported order, valid orders: `%`', _supported_order_list; -END IF; - -END; -$BODY$ -; - -/* - SELECT * FROM comments c, - LATERAL hivemind_helpers.database_post_object(c.database_api_post) lc - - doesnt help - i cant get rid of object in object -*/ - - -/* - -curl -s --data '{"jsonrpc":"2.0", "method":"database_api.list_comments", "params": {"start":["1970-01-01T00:00:00","",""], "limit":10, "order":"by_cashout_time"}, "id":1}' https://api.hive.blog - -curl -s --data '{"jsonrpc":"2.0", "method":"database_api.list_comments", "params": {"start":["",""], "limit":10, "order":"by_permlink"}, "id":1}' https://api.hive.blog - -curl -s --data '{"jsonrpc":"2.0", "method":"database_api.list_comments", "params": {"start":["hiveio","announcing-the-launch-of-hive-blockchain","",""], "limit":10, "order":"by_root"}, "id":1}' https://api.hive.blog - -curl -s --data '{"jsonrpc":"2.0", "method":"database_api.list_comments", "params": {"start":["hiveio","announcing-the-launch-of-hive-blockchain","",""], "limit":10, "order":"by_parent"}, "id":1}' https://api.hive.blog - -curl -s --data '{"jsonrpc":"2.0", "method":"database_api.list_comments", "params": {"start":["hiveio","1970-01-01T00:00:00","",""], "limit":10, "order":"by_last_update"}, "id":1}' https://api.hive.blog - -curl -s --data '{"jsonrpc":"2.0", "method":"database_api.list_comments", "params": {"start":["hiveio","1970-01-01T00:00:00","",""], "limit":10, "order":"by_author_last_update"}, "id":1}' https://api.hive.blog - -*/ diff --git a/hive/db/sql_scripts/hive_api_sql/common.sql b/hive/db/sql_scripts/hive_api_sql/common.sql deleted file mode 100644 index 76fbbe69f..000000000 --- a/hive/db/sql_scripts/hive_api_sql/common.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP FUNCTION IF EXISTS hivemind_helpers.get_community_id; -CREATE OR REPLACE FUNCTION hivemind_helpers.get_community_id(IN name TEXT) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - RETURN hivemind_app.find_community_id(name, TRUE); -END; -$BODY$ -; - ---SELECT * FROM hivemind_helpers.get_account_id('blocktrades') --HAF 440 Hivemind 441 ---SELECT * FROM hivemind_helpers.get_account_id('gtg') --HAF 14007 Hivemind 14008 -DROP FUNCTION IF EXISTS hivemind_helpers.get_account_id; -CREATE OR REPLACE FUNCTION hivemind_helpers.get_account_id(IN name TEXT) - RETURNS INT - LANGUAGE plpgsql - STABLE -AS -$BODY$ -BEGIN - RETURN hivemind_app.find_account_id(name, TRUE); -END; -$BODY$ -; diff --git a/hive/db/sql_scripts/hive_api_sql/notify.sql b/hive/db/sql_scripts/hive_api_sql/notify.sql deleted file mode 100644 index 386d507ff..000000000 --- a/hive/db/sql_scripts/hive_api_sql/notify.sql +++ /dev/null @@ -1,106 +0,0 @@ -DROP TYPE IF EXISTS hivemind_helpers.unread_notifications_type CASCADE; -CREATE TYPE hivemind_helpers.unread_notifications_type AS ( - lastread_at timestamp without time zone, - unread INT -); - ---SELECT * FROM hivemind_helpers.unread_notifications('gtg') -DROP FUNCTION IF EXISTS hivemind_helpers.unread_notifications; -CREATE OR REPLACE FUNCTION hivemind_helpers.unread_notifications( - IN account TEXT, - IN min_score INT DEFAULT 25 -) - RETURNS hivemind_helpers.unread_notifications_type - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - _author TEXT = hivemind_helpers.valid_account(account); - _min_score SMALLINT = hivemind_helpers.valid_score(min_score, 100, 25)::SMALLINT; -BEGIN - RETURN (lastread_at, unread)::hivemind_helpers.unread_notifications_type - FROM hivemind_app.get_number_of_unread_notifications(_author, _min_score); -END; -$BODY$ -; - -DROP TYPE IF EXISTS hivemind_helpers.account_notifications_type CASCADE; -CREATE TYPE hivemind_helpers.account_notifications_type AS ( - date TEXT, - id BIGINT, - msg TEXT, - score SMALLINT, - type TEXT, - url TEXT -); - ---SELECT * FROM hivemind_helpers.account_notifications('blocktrades') -DROP FUNCTION IF EXISTS hivemind_helpers.account_notifications; -CREATE OR REPLACE FUNCTION hivemind_helpers.account_notifications( - IN account TEXT, - IN min_score INT DEFAULT 25, - IN last_id BIGINT DEFAULT NULL, - IN "limit" INT DEFAULT 100 -) - RETURNS SETOF hivemind_helpers.account_notifications_type - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - _author TEXT = hivemind_helpers.valid_account(account); - _min_score SMALLINT = hivemind_helpers.valid_score(min_score, 100, 25)::SMALLINT; - _last_id BIGINT = hivemind_helpers.valid_number(last_id, 0, 'last_id')::BIGINT; - __limit SMALLINT = hivemind_helpers.valid_limit("limit", 100, 100)::SMALLINT; -BEGIN - RETURN QUERY ( - SELECT - hivemind_helpers.json_date(an.created_at::TIMESTAMPTZ), - an.id, - hivemind_helpers.render_msg((an.*)::hivemind_app.notification), - an.score, - hivemind_helpers.notify_type(an.type_id), - hivemind_helpers.render_url((an.*)::hivemind_app.notification) - FROM hivemind_app.account_notifications(_author, _min_score, _last_id, __limit) an -); - -END; -$BODY$ -; - ---SELECT * FROM hivemind_helpers.post_notifications('blocktrades','2nd-update-of-2024-releasing-the-new-haf-based-stack-for-hive-api-nodes') -DROP FUNCTION IF EXISTS hivemind_helpers.post_notifications; -CREATE OR REPLACE FUNCTION hivemind_helpers.post_notifications( - IN author TEXT, - IN permlink TEXT, - IN min_score INT DEFAULT 25, - IN last_id BIGINT DEFAULT NULL, - IN "limit" INT DEFAULT 100 -) - RETURNS SETOF hivemind_helpers.account_notifications_type - LANGUAGE plpgsql - STABLE -AS -$BODY$ -DECLARE - _author TEXT = hivemind_helpers.valid_account(author); - _permlink TEXT = hivemind_helpers.valid_permlink(permlink); - _min_score SMALLINT = hivemind_helpers.valid_score(min_score, 100, 25)::SMALLINT; - _last_id BIGINT = hivemind_helpers.valid_number(last_id, 0, 'last_id')::BIGINT; - __limit SMALLINT = hivemind_helpers.valid_limit("limit", 100, 100)::SMALLINT; -BEGIN - RETURN QUERY ( - SELECT - an.id, - hivemind_helpers.notify_type(an.type_id), - an.score, - hivemind_helpers.json_date(an.created_at::TIMESTAMPTZ), - hivemind_helpers.render_msg((an.*)::hivemind_app.notification), - hivemind_helpers.render_url((an.*)::hivemind_app.notification) - FROM hivemind_app.post_notifications(_author, _permlink, _min_score, _last_id, __limit) an -); - -END; -$BODY$ -; -- GitLab