From 638f932b6da5de32cdead28825981b82b4fe2ebe Mon Sep 17 00:00:00 2001 From: mtrela <mtrela@syncad.com> Date: Thu, 3 Sep 2020 13:46:10 +0200 Subject: [PATCH] Final version of `hive_accounts_info_view` view --- hive/db/schema.py | 69 +++++++++++++---------------- hive/server/bridge_api/objects.py | 2 +- hive/server/condenser_api/cursor.py | 9 ++-- 3 files changed, 36 insertions(+), 44 deletions(-) diff --git a/hive/db/schema.py b/hive/db/schema.py index c60b66163..0be38ce7a 100644 --- a/hive/db/schema.py +++ b/hive/db/schema.py @@ -576,10 +576,37 @@ def setup(db): SELECT id, name, + COALESCE( + ( + select count(*) post_count + FROM hive_posts hp + WHERE ha.id=hp.author_id + GROUP BY hp.author_id + ), + 0 + ) post_count, + COALESCE( + ( + select max(hp.created_at) + FROM hive_posts hp + WHERE ha.id=hp.author_id + GROUP BY hp.author_id + ), + '1970-01-01 00:00:00.0' + ) post_active_at, + COALESCE( + ( + select max(hv.last_update) + from hive_votes hv + WHERE ha.id=hv.voter_id + GROUP BY hv.voter_id + ), + '1970-01-01 00:00:00.0' + ) AS vote_active_at, + created_at, display_name, about, reputation, - created_at, profile_image, location, website, @@ -587,47 +614,13 @@ def setup(db): rank, following, followers, - ( - CASE - WHEN COALESCE( post_info.post_active_at, '1970-01-01 00:00:00.0' ) > COALESCE( vote_info.vote_active_at, '1970-01-01 00:00:00.0' ) THEN - ( - CASE - WHEN COALESCE( post_info.post_active_at, '1970-01-01 00:00:00.0' ) > created_at THEN - COALESCE( post_info.post_active_at, '1970-01-01 00:00:00.0' ) - ELSE - created_at - END - ) - ELSE - ( - CASE - WHEN COALESCE( vote_info.vote_active_at, '1970-01-01 00:00:00.0' ) > created_at THEN - COALESCE( vote_info.vote_active_at, '1970-01-01 00:00:00.0' ) - ELSE - created_at - END - ) - END - ) active_at, proxy, proxy_weight, lastread_at, cached_at, - raw_json, - COALESCE( post_info.post_count, 0 ) post_count - from hive_accounts ha - LEFT JOIN - ( - select count(*) post_count, max(created_at) post_active_at, author_id - from hive_posts - GROUP BY author_id - ) post_info ON ha.id=post_info.author_id - LEFT JOIN - ( - select max(last_update) vote_active_at, voter_id - from hive_votes - GROUP BY voter_id - )vote_info ON ha.id=vote_info.voter_id + raw_json + FROM + hive_accounts ha """ db.query_no_return(sql) diff --git a/hive/server/bridge_api/objects.py b/hive/server/bridge_api/objects.py index ae9969d14..3ba4db6b9 100644 --- a/hive/server/bridge_api/objects.py +++ b/hive/server/bridge_api/objects.py @@ -201,7 +201,7 @@ def _condenser_profile_object(row): 'id': row['id'], 'name': row['name'], 'created': json_date(row['created_at']), - 'active': json_date(row['active_at']), + 'active': json_date(max( row['created_at'], row['post_active_at'], row['vote_active_at'] )), 'post_count': row['post_count'], 'reputation': row['reputation'], 'blacklists': blacklists, diff --git a/hive/server/condenser_api/cursor.py b/hive/server/condenser_api/cursor.py index a6f062e87..fca016f02 100644 --- a/hive/server/condenser_api/cursor.py +++ b/hive/server/condenser_api/cursor.py @@ -439,10 +439,7 @@ async def get_accounts(db, accounts: list): ret = [] names = ["'{}'".format(a) for a in accounts] - sql = """SELECT created_at, reputation, display_name, about, - location, website, profile_image, cover_image, followers, following, - proxy, post_count, proxy_weight, rank, - lastread_at, active_at, cached_at, raw_json + sql = """SELECT * FROM hive_accounts_info_view WHERE name IN ({})""".format(",".join(names)) result = await db.query_all(sql) @@ -465,7 +462,9 @@ async def get_accounts(db, accounts: list): account_data['proxy_weight'] = row.proxy_weight account_data['rank'] = row.rank account_data['lastread_at'] = row.lastread_at.isoformat() - account_data['active_at'] = row.active_at.isoformat() + + account_data['active_at'] = max( row.created_at, row.post_active_at, row.vote_active_at ).isoformat() + account_data['cached_at'] = row.cached_at.isoformat() ret.append(account_data) -- GitLab