From a92b42cb409d2b72a84c497c817366ebd2ef9a9c Mon Sep 17 00:00:00 2001
From: ABW <andrzejl@syncad.com>
Date: Thu, 29 Oct 2020 13:35:31 +0100
Subject: [PATCH] WIP: reusing code of bridge calls in condenser_api

---
 hive/db/schema.py                             |   3 -
 .../bridge_get_ranked_post_for_all.sql        |   5 +-
 .../bridge_get_ranked_post_for_tag.sql        |   5 +-
 ...nser_get_comment_discussions_by_payout.sql |  55 --------
 .../condenser_get_discussions_by_promoted.sql | 127 ------------------
 ...ndenser_get_post_discussions_by_payout.sql |  55 --------
 hive/server/bridge_api/methods.py             |   4 +-
 hive/server/condenser_api/methods.py          |  23 +++-
 tests/tests_api                               |   2 +-
 9 files changed, 26 insertions(+), 253 deletions(-)
 delete mode 100644 hive/db/sql_scripts/condenser_get_comment_discussions_by_payout.sql
 delete mode 100644 hive/db/sql_scripts/condenser_get_discussions_by_promoted.sql
 delete mode 100644 hive/db/sql_scripts/condenser_get_post_discussions_by_payout.sql

diff --git a/hive/db/schema.py b/hive/db/schema.py
index fa8e25bd1..e4a9b7ef7 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 556749d78..39585907e 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 2cf4c8203..d9652253a 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 4052a0965..000000000
--- 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 d9afedb60..000000000
--- 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 4996aaa81..000000000
--- 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 4cf268e83..39651c09d 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 8a5db2981..6025245e4 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 3f308b5d9..a605f56f0 160000
--- a/tests/tests_api
+++ b/tests/tests_api
@@ -1 +1 @@
-Subproject commit 3f308b5d98b924cde5e33c65ae64ba96cb3c786d
+Subproject commit a605f56f0c449f233961db0405bc9f9605a2caa6
-- 
GitLab