diff --git a/hive/db/sql_scripts/condenser_get_discussions_by_created.sql b/hive/db/sql_scripts/condenser_get_discussions_by_created.sql index 16d4b648a46b36cc2cacf6c35ccc74aab65a4000..c3a1d6c543e6549962f24b39d8485c73fce83f86 100644 --- a/hive/db/sql_scripts/condenser_get_discussions_by_created.sql +++ b/hive/db/sql_scripts/condenser_get_discussions_by_created.sql @@ -62,3 +62,65 @@ BEGIN END $function$ language plpgsql STABLE; + +DROP FUNCTION IF EXISTS condenser_get_discussions_by_created_with_empty_tag; + +CREATE FUNCTION condenser_get_discussions_by_created_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 + WHERE ( __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.id DESC LIMIT _limit; +END +$function$ +language plpgsql STABLE; diff --git a/hive/db/sql_scripts/condenser_get_discussions_by_hot.sql b/hive/db/sql_scripts/condenser_get_discussions_by_hot.sql index 6e1dfb7dec41820d554c89dded55f1017a048f9e..981ff24fdb70f8bed492f210231f2340ccfc90dd 100644 --- a/hive/db/sql_scripts/condenser_get_discussions_by_hot.sql +++ b/hive/db/sql_scripts/condenser_get_discussions_by_hot.sql @@ -62,3 +62,65 @@ BEGIN END $function$ language plpgsql STABLE; + +DROP FUNCTION IF EXISTS condenser_get_discussions_by_hot_with_empty_tag; + +CREATE FUNCTION condenser_get_discussions_by_hot_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 + WHERE hp.is_paidout = '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 ) AND hp.depth = 0 ) ) ) + ORDER BY hp.sc_hot 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 index 8a4f4086f2db014cfae7880cfef98418d9dbd7ef..d9afedb60212cfeab6ee78d59427bc2a2ae9db22 100644 --- a/hive/db/sql_scripts/condenser_get_discussions_by_promoted.sql +++ b/hive/db/sql_scripts/condenser_get_discussions_by_promoted.sql @@ -62,3 +62,66 @@ BEGIN 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_discussions_by_trending.sql b/hive/db/sql_scripts/condenser_get_discussions_by_trending.sql index 400837597d8a0201f8b6d12797991959d7964793..277e845083349a2c11365d2937fba8880e10aa33 100644 --- a/hive/db/sql_scripts/condenser_get_discussions_by_trending.sql +++ b/hive/db/sql_scripts/condenser_get_discussions_by_trending.sql @@ -62,3 +62,65 @@ BEGIN END $function$ language plpgsql STABLE; + +DROP FUNCTION IF EXISTS condenser_get_discussions_by_trending_with_empty_tag; + +CREATE FUNCTION condenser_get_discussions_by_trending_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 + WHERE hp.is_paidout = '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 ) AND hp.depth = 0 ) ) ) + ORDER BY hp.sc_trend DESC, hp.id DESC LIMIT _limit; +END +$function$ +language plpgsql STABLE; diff --git a/hive/server/condenser_api/get_state.py b/hive/server/condenser_api/get_state.py index c4454d50d65410a16c3c214b4fe7dd046f7de15c..269b5945536bf4dadca04b948c092aecaa4c1049 100644 --- a/hive/server/condenser_api/get_state.py +++ b/hive/server/condenser_api/get_state.py @@ -138,7 +138,7 @@ async def get_state(context, path: str): sort = valid_sort(part[0]) tag = valid_tag(part[1].lower(), allow_empty=True) pids = await get_posts_by_given_sort(context, sort, '', '', 20, tag) - state['content'] = _keyed_posts(await load_posts(db, pids)) + state['content'] = _keyed_posts(pids) state['discussion_idx'] = {tag: {sort: list(state['content'].keys())}} state['tag_idx'] = {'trending': await get_top_trending_tags_summary(context)} diff --git a/hive/server/condenser_api/methods.py b/hive/server/condenser_api/methods.py index 10b6b053ef479076eeb28bb982b4e742327d87eb..f2e717d86ff4859dbfa6c24d3d8a7cc8cc3e8a80 100644 --- a/hive/server/condenser_api/methods.py +++ b/hive/server/condenser_api/methods.py @@ -247,13 +247,25 @@ async def get_posts_by_given_sort(context, sort: str, start_author: str = '', st posts = [] if sort == 'created': - sql = "SELECT * FROM condenser_get_discussions_by_created( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag == '': + sql = "SELECT * FROM condenser_get_discussions_by_created_with_empty_tag( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + else: + sql = "SELECT * FROM condenser_get_discussions_by_created( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" elif sort == 'trending': - sql = "SELECT * FROM condenser_get_discussions_by_trending( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag == '': + sql = "SELECT * FROM condenser_get_discussions_by_trending_with_empty_tag( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + else: + sql = "SELECT * FROM condenser_get_discussions_by_trending( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" elif sort == 'hot': - sql = "SELECT * FROM condenser_get_discussions_by_hot( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag == '': + sql = "SELECT * FROM condenser_get_discussions_by_hot_with_empty_tag( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + else: + sql = "SELECT * FROM condenser_get_discussions_by_hot( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" elif sort == 'promoted': - sql = "SELECT * FROM condenser_get_discussions_by_promoted( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + if tag == '': + sql = "SELECT * FROM condenser_get_discussions_by_promoted_with_empty_tag( (:tag)::VARCHAR, (:author)::VARCHAR, (:permlink)::VARCHAR, (:limit)::SMALLINT )" + else: + sql = "SELECT * FROM condenser_get_discussions_by_promoted( (: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 )" elif sort == 'comment_by_payout':