diff --git a/hive/db/schema.py b/hive/db/schema.py index fa8e25bd1ad3c57cb4e8d57bdc5bdc9c051842ca..e4a9b7ef759f2d0a50929a990cdb82f54fd15b76 100644 --- a/hive/db/schema.py +++ b/hive/db/schema.py @@ -1609,9 +1609,6 @@ def setup(db): "hot_and_trends.sql", "condenser_get_discussions_by_trending.sql", "condenser_get_discussions_by_hot.sql", - "condenser_get_discussions_by_promoted.sql", - "condenser_get_post_discussions_by_payout.sql", - "condenser_get_comment_discussions_by_payout.sql", "update_hive_posts_children_count.sql" ] from os.path import dirname, realpath diff --git a/hive/db/sql_scripts/bridge_get_ranked_post_for_all.sql b/hive/db/sql_scripts/bridge_get_ranked_post_for_all.sql index 556749d787afac9ff0467144e644a1aae32b5e2d..39585907eb734b6d9ef9b39e1544d7048b57ce4e 100644 --- a/hive/db/sql_scripts/bridge_get_ranked_post_for_all.sql +++ b/hive/db/sql_scripts/bridge_get_ranked_post_for_all.sql @@ -270,7 +270,7 @@ $function$ language plpgsql STABLE; DROP FUNCTION IF EXISTS bridge_get_ranked_post_by_payout; -CREATE FUNCTION bridge_get_ranked_post_by_payout( in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT ) +CREATE FUNCTION bridge_get_ranked_post_by_payout( in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT, in _bridge_api BOOLEAN ) RETURNS SETOF bridge_api_post AS $function$ @@ -328,7 +328,8 @@ BEGIN , ( hp1.payout + hp1.pending_payout ) as all_payout FROM hive_posts hp1 - WHERE hp1.counter_deleted = 0 AND NOT hp1.is_paidout AND hp1.payout_at BETWEEN __head_block_time + interval '12 hours' AND __head_block_time + interval '36 hours' + WHERE hp1.counter_deleted = 0 AND NOT hp1.is_paidout + AND ( ( NOT _bridge_api AND hp1.depth = 0 ) OR ( _bridge_api AND hp1.payout_at BETWEEN __head_block_time + interval '12 hours' AND __head_block_time + interval '36 hours' ) ) AND ( __post_id = 0 OR ( hp1.payout + hp1.pending_payout ) < __payout_limit OR ( ( hp1.payout + hp1.pending_payout ) = __payout_limit AND hp1.id < __post_id ) ) ORDER BY ( hp1.payout + hp1.pending_payout ) DESC, hp1.id DESC LIMIT _limit diff --git a/hive/db/sql_scripts/bridge_get_ranked_post_for_tag.sql b/hive/db/sql_scripts/bridge_get_ranked_post_for_tag.sql index 2cf4c8203e4d7fef345a3e016cd76f5bfd4df2b6..d9652253ad1aff52cd9274334ea1c889f68ee36b 100644 --- a/hive/db/sql_scripts/bridge_get_ranked_post_for_tag.sql +++ b/hive/db/sql_scripts/bridge_get_ranked_post_for_tag.sql @@ -282,7 +282,7 @@ $function$ language plpgsql STABLE; DROP FUNCTION IF EXISTS bridge_get_ranked_post_by_payout_for_category; -CREATE FUNCTION bridge_get_ranked_post_by_payout_for_category( in _category VARCHAR, in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT ) +CREATE FUNCTION bridge_get_ranked_post_by_payout_for_category( in _category VARCHAR, in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT, in _bridge_api BOOLEAN ) RETURNS SETOF bridge_api_post AS $function$ @@ -342,7 +342,8 @@ BEGIN , ( hp1.payout + hp1.pending_payout ) as all_payout FROM hive_posts hp1 - WHERE hp1.category_id = __hive_category AND hp1.counter_deleted = 0 AND NOT hp1.is_paidout AND hp1.payout_at BETWEEN __head_block_time + interval '12 hours' AND __head_block_time + interval '36 hours' + WHERE hp1.category_id = __hive_category AND hp1.counter_deleted = 0 AND NOT hp1.is_paidout + AND ( ( NOT _bridge_api AND hp1.depth = 0 ) OR ( _bridge_api AND hp1.payout_at BETWEEN __head_block_time + interval '12 hours' AND __head_block_time + interval '36 hours' ) ) AND ( __post_id = 0 OR ( hp1.payout + hp1.pending_payout ) < __payout_limit OR ( ( hp1.payout + hp1.pending_payout ) = __payout_limit AND hp1.id < __post_id ) ) ORDER BY ( hp1.payout + hp1.pending_payout ) DESC, hp1.id DESC LIMIT _limit diff --git a/hive/db/sql_scripts/condenser_get_comment_discussions_by_payout.sql b/hive/db/sql_scripts/condenser_get_comment_discussions_by_payout.sql deleted file mode 100644 index 4052a096594f89fd37a5ad3d7d013da13dba8ac2..0000000000000000000000000000000000000000 --- a/hive/db/sql_scripts/condenser_get_comment_discussions_by_payout.sql +++ /dev/null @@ -1,55 +0,0 @@ -DROP FUNCTION IF EXISTS condenser_get_comment_discussions_by_payout; - -CREATE FUNCTION condenser_get_comment_discussions_by_payout( in _tag VARCHAR, in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT ) -RETURNS SETOF bridge_api_post -AS -$function$ -DECLARE - __post_id INT; - __category_id INT; -BEGIN - __post_id = find_comment_id( _author, _permlink, True ); - __category_id = ( SELECT id FROM hive_category_data WHERE category = _tag ); - RETURN QUERY SELECT - hp.id, - hp.author, - hp.parent_author, - hp.author_rep, - hp.root_title, - hp.beneficiaries, - hp.max_accepted_payout, - hp.percent_hbd, - hp.url, - hp.permlink, - hp.parent_permlink_or_category, - hp.title, - hp.body, - hp.category, - hp.depth, - hp.promoted, - hp.payout, - hp.pending_payout, - hp.payout_at, - hp.is_paidout, - hp.children, - hp.votes, - hp.created_at, - hp.updated_at, - hp.rshares, - hp.abs_rshares, - hp.json, - hp.is_hidden, - hp.is_grayed, - hp.total_votes, - hp.sc_trend, - hp.role_title, - hp.community_title, - hp.role_id, - hp.is_pinned, - hp.curator_payout_value - FROM hive_posts_view hp - WHERE hp.is_paidout = '0' AND hp.depth > 0 AND ( __category_id = 0 OR hp.category_id = __category_id ) - ORDER BY (hp.payout+hp.pending_payout) DESC, hp.id DESC LIMIT _limit; -END -$function$ -language plpgsql STABLE; diff --git a/hive/db/sql_scripts/condenser_get_discussions_by_promoted.sql b/hive/db/sql_scripts/condenser_get_discussions_by_promoted.sql deleted file mode 100644 index d9afedb60212cfeab6ee78d59427bc2a2ae9db22..0000000000000000000000000000000000000000 --- a/hive/db/sql_scripts/condenser_get_discussions_by_promoted.sql +++ /dev/null @@ -1,127 +0,0 @@ -DROP FUNCTION IF EXISTS condenser_get_discussions_by_promoted; - -CREATE FUNCTION condenser_get_discussions_by_promoted( in _tag VARCHAR, in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT ) -RETURNS SETOF bridge_api_post -AS -$function$ -DECLARE - __post_id INT; - __community VARCHAR; - __tag_id INT; - __category_id INT; -BEGIN - - __post_id = find_comment_id( _author, _permlink, True ); - __community = ( SELECT substring(_tag from '^hive-') ); - - __tag_id = ( SELECT id FROM hive_tag_data WHERE tag = _tag ); - __category_id = ( SELECT id FROM hive_category_data WHERE category = _tag ); - - RETURN QUERY SELECT - hp.id, - hp.author, - hp.parent_author, - hp.author_rep, - hp.root_title, - hp.beneficiaries, - hp.max_accepted_payout, - hp.percent_hbd, - hp.url, - hp.permlink, - hp.parent_permlink_or_category, - hp.title, - hp.body, - hp.category, - hp.depth, - hp.promoted, - hp.payout, - hp.pending_payout, - hp.payout_at, - hp.is_paidout, - hp.children, - hp.votes, - hp.created_at, - hp.updated_at, - hp.rshares, - hp.abs_rshares, - hp.json, - hp.is_hidden, - hp.is_grayed, - hp.total_votes, - hp.sc_trend, - hp.role_title, - hp.community_title, - hp.role_id, - hp.is_pinned, - hp.curator_payout_value - FROM hive_posts_view hp - INNER JOIN hive_post_tags hpt ON hpt.post_id = hp.id - WHERE hp.promoted > 0 AND ( __tag_id = 0 OR hpt.tag_id = __tag_id ) AND ( __post_id = 0 OR hp.id < __post_id ) - AND ( ( __community IS NULL ) OR ( ( __community IS NOT NULL ) AND ( __category_id = 0 OR hp.category_id = __category_id ) ) ) - ORDER BY hp.promoted DESC, hp.id DESC LIMIT _limit; -END -$function$ -language plpgsql STABLE; - -DROP FUNCTION IF EXISTS condenser_get_discussions_by_promoted_with_empty_tag; - -CREATE FUNCTION condenser_get_discussions_by_promoted_with_empty_tag( in _tag VARCHAR, in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT ) -RETURNS SETOF bridge_api_post -AS -$function$ -DECLARE - __post_id INT; - __community VARCHAR; - __category_id INT; -BEGIN - - __post_id = find_comment_id( _author, _permlink, True ); - __community = ( SELECT substring(_tag from '^hive-') ); - - __category_id = ( SELECT id FROM hive_category_data WHERE category = _tag ); - - RETURN QUERY SELECT - hp.id, - hp.author, - hp.parent_author, - hp.author_rep, - hp.root_title, - hp.beneficiaries, - hp.max_accepted_payout, - hp.percent_hbd, - hp.url, - hp.permlink, - hp.parent_permlink_or_category, - hp.title, - hp.body, - hp.category, - hp.depth, - hp.promoted, - hp.payout, - hp.pending_payout, - hp.payout_at, - hp.is_paidout, - hp.children, - hp.votes, - hp.created_at, - hp.updated_at, - hp.rshares, - hp.abs_rshares, - hp.json, - hp.is_hidden, - hp.is_grayed, - hp.total_votes, - hp.sc_trend, - hp.role_title, - hp.community_title, - hp.role_id, - hp.is_pinned, - hp.curator_payout_value - FROM hive_posts_view hp - INNER JOIN hive_post_tags hpt ON hpt.post_id = hp.id - WHERE hp.promoted > 0 AND ( __post_id = 0 OR hp.id < __post_id ) - AND ( ( __community IS NULL ) OR ( ( __community IS NOT NULL ) AND ( __category_id = 0 OR hp.category_id = __category_id ) ) ) - ORDER BY hp.promoted DESC, hp.id DESC LIMIT _limit; -END -$function$ -language plpgsql STABLE; diff --git a/hive/db/sql_scripts/condenser_get_post_discussions_by_payout.sql b/hive/db/sql_scripts/condenser_get_post_discussions_by_payout.sql deleted file mode 100644 index 4996aaa81a78874cede434a1db0a0f0e2d80af62..0000000000000000000000000000000000000000 --- a/hive/db/sql_scripts/condenser_get_post_discussions_by_payout.sql +++ /dev/null @@ -1,55 +0,0 @@ -DROP FUNCTION IF EXISTS condenser_get_post_discussions_by_payout; - -CREATE FUNCTION condenser_get_post_discussions_by_payout( in _tag VARCHAR, in _author VARCHAR, in _permlink VARCHAR, in _limit SMALLINT ) -RETURNS SETOF bridge_api_post -AS -$function$ -DECLARE - __post_id INT; - __category_id INT; -BEGIN - __post_id = find_comment_id( _author, _permlink, True ); - __category_id = ( SELECT id FROM hive_category_data WHERE category = _tag ); - RETURN QUERY SELECT - hp.id, - hp.author, - hp.parent_author, - hp.author_rep, - hp.root_title, - hp.beneficiaries, - hp.max_accepted_payout, - hp.percent_hbd, - hp.url, - hp.permlink, - hp.parent_permlink_or_category, - hp.title, - hp.body, - hp.category, - hp.depth, - hp.promoted, - hp.payout, - hp.pending_payout, - hp.payout_at, - hp.is_paidout, - hp.children, - hp.votes, - hp.created_at, - hp.updated_at, - hp.rshares, - hp.abs_rshares, - hp.json, - hp.is_hidden, - hp.is_grayed, - hp.total_votes, - hp.sc_trend, - hp.role_title, - hp.community_title, - hp.role_id, - hp.is_pinned, - hp.curator_payout_value - FROM hive_posts_view hp - WHERE hp.is_paidout = '0' AND hp.depth = 0 AND ( __category_id = 0 OR hp.category_id = __category_id ) - ORDER BY (hp.payout+hp.pending_payout) DESC, hp.id DESC LIMIT _limit; -END -$function$ -language plpgsql STABLE; diff --git a/hive/server/bridge_api/methods.py b/hive/server/bridge_api/methods.py index 4cf268e83d0616c993a809ea4fce24e23e8b5964..39651c09dae6f882c80c09796f839b962b23dab8 100644 --- a/hive/server/bridge_api/methods.py +++ b/hive/server/bridge_api/methods.py @@ -165,7 +165,7 @@ async def _get_ranked_posts_for_tag( db, sort:str, tag, start_author:str, start_ return await execute_tags_query(db, sql, limit) if sort == 'payout': - sql = "SELECT * FROM bridge_get_ranked_post_by_payout_for_category( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + sql = "SELECT * FROM bridge_get_ranked_post_by_payout_for_category( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT, True )" return await execute_tags_query(db, sql, limit) if sort == 'payout_comments': @@ -208,7 +208,7 @@ async def _get_ranked_posts_for_all( db, sort:str, start_author:str, start_perml return await execute_query(db, sql, limit) if sort == 'payout': - sql = "SELECT * FROM bridge_get_ranked_post_by_payout( (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + sql = "SELECT * FROM bridge_get_ranked_post_by_payout( (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT, True )" return await execute_query(db, sql, limit) if sort == 'payout_comments': diff --git a/hive/server/condenser_api/methods.py b/hive/server/condenser_api/methods.py index 8a5db2981d0760dee204efefbedd64b0ad705b93..6025245e4da94a4397ff70f171c5dca278497c1a 100644 --- a/hive/server/condenser_api/methods.py +++ b/hive/server/condenser_api/methods.py @@ -137,7 +137,8 @@ async def get_account_reputations(context, account_lower_bound: str = None, limi async def _get_account_reputations_impl(db, fat_node_style, account_lower_bound, limit): """Enumerate account reputations.""" - limit = valid_limit(limit, 1000, None) + assert isinstance(account_lower_bound, str), "invalid account_lower_bound type" + limit = valid_limit(limit, 1000, 1000) seek = '' if account_lower_bound: seek = "WHERE name >= :start" @@ -263,22 +264,32 @@ async def get_posts_by_given_sort(context, sort: str, start_author: str = '', st else: sql = "SELECT * FROM condenser_get_discussions_by_hot( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" elif sort == 'promoted': - if tag == '': - sql = "SELECT * FROM condenser_get_discussions_by_promoted_with_empty_tag( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag[:5] == 'hive-': + sql = "SELECT * FROM bridge_get_ranked_post_by_promoted_for_community( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + elif tag == '': + sql = "SELECT * FROM bridge_get_ranked_post_by_promoted( (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" else: - sql = "SELECT * FROM condenser_get_discussions_by_promoted( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + sql = "SELECT * FROM bridge_get_ranked_post_by_promoted_for_tag( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" elif sort == 'post_by_payout': - sql = "SELECT * FROM condenser_get_post_discussions_by_payout( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag == '': + sql = "SELECT * FROM bridge_get_ranked_post_by_payout( (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT, False )" + else: + sql = "SELECT * FROM bridge_get_ranked_post_by_payout_for_category( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT, False )" elif sort == 'comment_by_payout': - sql = "SELECT * FROM condenser_get_comment_discussions_by_payout( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag == '': + sql = "SELECT * FROM bridge_get_ranked_post_by_payout_comments( (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + else: + sql = "SELECT * FROM bridge_get_ranked_post_by_payout_comments_for_category( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" else: return posts sql_result = await db.query_all(sql, tag=tag, author=start_author, permlink=start_permlink, limit=limit ) + muted_accounts = Mutes.all() for row in sql_result: post = _condenser_post_object(row, truncate_body) post['active_votes'] = await find_votes_impl(db, row['author'], row['permlink'], VotesPresentation.CondenserApi) + post['active_votes'] = _mute_votes(post['active_votes'], muted_accounts) posts.append(post) return posts diff --git a/tests/tests_api b/tests/tests_api index 3f308b5d98b924cde5e33c65ae64ba96cb3c786d..a605f56f0c449f233961db0405bc9f9605a2caa6 160000 --- a/tests/tests_api +++ b/tests/tests_api @@ -1 +1 @@ -Subproject commit 3f308b5d98b924cde5e33c65ae64ba96cb3c786d +Subproject commit a605f56f0c449f233961db0405bc9f9605a2caa6