Add top_users

This commit is contained in:
hok7z 2022-12-17 14:30:04 +02:00
parent ae38540076
commit d918b9a25d
1 changed files with 36 additions and 5 deletions

View File

@ -6,6 +6,37 @@ from datetime import datetime
group_stat_api = Blueprint('group_stat_api', __name__) 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"]) @group_stat_api.route("/chat_activity", methods=["GET"])
def chat_activity(): def chat_activity():
from_date = request.args.get("from_date") from_date = request.args.get("from_date")
@ -28,11 +59,11 @@ def chat_activity():
to_date = datetime.strptime(to_date, date_format) to_date = datetime.strptime(to_date, date_format)
query = (Message query = (Message
.select(fn.date_trunc(group_by, Message.timestamp).alias('range'), fn.count(Message.id).alias('count')) .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)) .where((Message.timestamp >= from_date) & (Message.timestamp <= to_date))
.group_by(fn.date_trunc(group_by, Message.timestamp)) .group_by(fn.date_trunc(group_by, Message.timestamp))
.order_by(SQL("range")) .order_by(SQL("range"))
) )
for group in query: for group in query:
dates.append(group.range.strftime("%Y-%m-%d")) dates.append(group.range.strftime("%Y-%m-%d"))