diff --git a/hive/server/condenser_api/methods.py b/hive/server/condenser_api/methods.py index 97f2d1ca3b21ebd791676c7949f5428c48c631a8..fe0a5bb9cf730659f0430aa8c888eca5e98795f2 100644 --- a/hive/server/condenser_api/methods.py +++ b/hive/server/condenser_api/methods.py @@ -3,7 +3,7 @@ from functools import wraps import hive.server.condenser_api.cursor as cursor -from hive.server.condenser_api.objects import load_posts, load_posts_reblogs +from hive.server.condenser_api.objects import load_posts, load_posts_reblogs, resultset_to_posts from hive.server.common.helpers import ( ApiError, return_error_info, @@ -115,13 +115,24 @@ async def get_content_replies(context, author: str, permlink: str): db = context['db'] valid_account(author) valid_permlink(permlink) - parent_id = await cursor.get_post_id(db, author, permlink) - if parent_id: - child_ids = await cursor.get_child_ids(db, parent_id) - if child_ids: - return await load_posts(db, child_ids) - return [] + sql = """SELECT post_id, author, permlink, title, body, category, depth, + promoted, payout, payout_at, is_paidout, children, votes, + created_at, updated_at, rshares, raw_json, json + FROM hive_posts_cache WHERE post_id IN ( + SELECT hp2.id FROM hive_posts hp2 + WHERE hp2.is_deleted = '0' AND + hp2.parent_id = (SELECT id FROM hive_posts + WHERE author = :author + AND permlink = :permlink AND is_deleted = '0') + LIMIT :limit + ) + ORDER BY post_id""" + + result=await db.query_all(sql, author=author, permlink = permlink, limit=5000) + + posts = await resultset_to_posts(db=db, resultset=result, truncate_body=0) + return posts # Discussion Queries diff --git a/hive/server/condenser_api/objects.py b/hive/server/condenser_api/objects.py index 78d342a59419abcc3ad6ec51b5f9d6b00b53da1f..725d804bbafae4f4eec459beccd3a9e0511de3c6 100644 --- a/hive/server/condenser_api/objects.py +++ b/hive/server/condenser_api/objects.py @@ -88,6 +88,20 @@ async def load_posts(db, ids, truncate_body=0): return [posts_by_id[_id] for _id in ids] +async def resultset_to_posts(db, resultset, truncate_body=0): + author_reps = await _query_author_rep_map(db, resultset) + muted_accounts = Mutes.all() + + posts = [] + for row in resultset: + row = dict(row) + row['author_rep'] = author_reps[row['author']] + post = _condenser_post_object(row, truncate_body=truncate_body) + post['active_votes'] = _mute_votes(post['active_votes'], muted_accounts) + posts.append(post) + + return posts + async def _query_author_rep_map(db, posts): """Given a list of posts, returns an author->reputation map.""" if not posts: