From d918b9a25d6496a9780df6f57161a13d588dbf51 Mon Sep 17 00:00:00 2001 From: hok7z Date: Sat, 17 Dec 2022 14:30:04 +0200 Subject: [PATCH] Add top_users --- apps/group_stat_api.py | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/apps/group_stat_api.py b/apps/group_stat_api.py index b57b774..4a803fc 100644 --- a/apps/group_stat_api.py +++ b/apps/group_stat_api.py @@ -6,6 +6,37 @@ from datetime import datetime group_stat_api = Blueprint('group_stat_api', __name__) + +@group_stat_api.route("/top_users", methods=["GET"]) +def top_users(): + number = request.args.get("number") + + if not number: number = 3 + + number = int(number) + + members = [] + counts = [] + + query = (Member + .select(fn.count(Message.id).alias("count"), Member) + .join(Message) + .group_by(Member) + .order_by(SQL("count").desc()) + ) + + for group in query: + members.append(group.first_name) + counts.append(group.count) + + members.insert(0, "Others") + counts.insert(0, sum(counts[number:])) + + return jsonify({ + "members": members[:number + 1], + "counts": counts[:number + 1] + }) + @group_stat_api.route("/chat_activity", methods=["GET"]) def chat_activity(): from_date = request.args.get("from_date") @@ -28,11 +59,11 @@ def chat_activity(): to_date = datetime.strptime(to_date, date_format) query = (Message - .select(fn.date_trunc(group_by, Message.timestamp).alias('range'), fn.count(Message.id).alias('count')) - .where((Message.timestamp >= from_date) & (Message.timestamp <= to_date)) - .group_by(fn.date_trunc(group_by, Message.timestamp)) - .order_by(SQL("range")) - ) + .select(fn.date_trunc(group_by, Message.timestamp).alias('range'), fn.count(Message.id).alias('count')) + .where((Message.timestamp >= from_date) & (Message.timestamp <= to_date)) + .group_by(fn.date_trunc(group_by, Message.timestamp)) + .order_by(SQL("range")) + ) for group in query: dates.append(group.range.strftime("%Y-%m-%d"))