From add2351beebf5f3bebbd3c36b4539ccdcb0f6632 Mon Sep 17 00:00:00 2001 From: hok7z Date: Wed, 21 Dec 2022 22:37:54 +0200 Subject: [PATCH] Add /user_acitivity --- apps/group_stat_api.py | 59 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/apps/group_stat_api.py b/apps/group_stat_api.py index 8d63c13..731fec9 100644 --- a/apps/group_stat_api.py +++ b/apps/group_stat_api.py @@ -1,4 +1,6 @@ -from flask import Blueprint, jsonify, request +from flask import Blueprint +from flask import request, jsonify + from peewee import SQL, fn from database import Message, Member @@ -87,3 +89,58 @@ def chat_activity(): "date": dates, "counts": counts }) + +@group_stat_api.route("/user_activity", methods=["GET"]) +def user_activity(): + dates = [] + counts = [] + + user_id = request.args.get("user_id") + user = Member.get_or_none(Member.user_id == user_id) + + if not user: + return jsonify({ + "err":"invalid user_id" + }),422 + + from_date = request.args.get("from_date") + to_date = request.args.get("to_date") + + if not from_date or not to_date: + return jsonify({ + "err": "from_date/to_date empty" + }),422 + + group_by = request.args.get("group_by") + group_by = group_by if group_by else "day" + + date_format = request.args.get("date_format") + date_format = date_format if date_format else "%Y-%m-%d" + + try: + from_date = datetime.strptime(from_date,date_format) + to_date = datetime.strptime(to_date, date_format) + except ValueError: + return jsonify({ + "from_date": from_date, + "to_date": to_date, + "date_format": date_format, + "err":"can't format datatime obj" + }),422 + + query = (Message + .select( fn.date_trunc(group_by, Message.timestamp).alias("range"), fn.count(Message.id).alias("count") ) + .where((Message.user == user) & (Message.timestamp >= from_date) & (Message.timestamp <= to_date)) + .group_by(fn.date_trunc(group_by, Message.timestamp)) + .order_by(SQL("range")) + ) + + for row in query: + dates.append(row.range.strftime(date_format)) + counts.append(row.count) + + return jsonify({ + "date": dates, + "counts": counts + }) +