From 37851c5dc573c29403fd82db5dc0a06df68377ba Mon Sep 17 00:00:00 2001 From: hok7z Date: Wed, 14 Dec 2022 16:12:57 +0200 Subject: [PATCH] top_users write database --- app.py | 2 +- apps/group_stat_api.py | 31 ++++++++++++++++++++++++++----- database.py | 13 ++++++------- static/js/top-users.js | 9 ++++----- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/app.py b/app.py index c70136a..d95e6fb 100644 --- a/app.py +++ b/app.py @@ -21,4 +21,4 @@ if __name__ == '__main__': build_database() logging.info("Build database models") - app.run(host="0.0.0.0") + app.run(host="0.0.0.0") \ No newline at end of file diff --git a/apps/group_stat_api.py b/apps/group_stat_api.py index ffe7bc1..80c1944 100644 --- a/apps/group_stat_api.py +++ b/apps/group_stat_api.py @@ -1,12 +1,33 @@ -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request +from database import Message, Member + +from datetime import datetime group_stat_api = Blueprint('group_stat_api', __name__) -@group_stat_api.route("/top3_users",methods=["POST"]) +@group_stat_api.route("/top_users",methods=["GET"]) def top_users(): - # TODO: database + number = request.args.get("number") + + if not number: number = 3 + + number = int(number) + + members = [] + counts = [] + + for user in Member.select(): + members.append(user.first_name) + counts.append(Message.select().where(Message.user_id == user.user_id).count()) + + # Sorting + counts, members = (list(t) for t in zip(*sorted(zip(counts,members),reverse=True))) + + members.insert(number, "Others") + counts.insert(number, sum(counts[number:])) + return jsonify({ - "members": ["Mr.D", "π™²πšŠπšπš’πš˜πš—", "Π’Ρ‘ΠΌΠ°","Others"], - "counts":[4026,3024,2024,4096] + "members":members[:number+1], + "counts":counts[:number+1] }) diff --git a/database.py b/database.py index 5489b83..799232a 100644 --- a/database.py +++ b/database.py @@ -1,8 +1,7 @@ -from peewee import Model, CharField, BigIntegerField, DateField, TimestampField +from peewee import DateTimeField, ForeignKeyField, Model, CharField, BigIntegerField, DateField, TimestampField from playhouse.db_url import connect -from datetime import date, datetime - +from datetime import date, datetime, timedelta from config import db_url db = connect(db_url) @@ -32,12 +31,12 @@ class Member(Model): class Message(Model): user_id = BigIntegerField() - timestamp = TimestampField(default=datetime.now()) - + first_name = CharField() + timestamp = DateTimeField(default=datetime.now()) + class Meta: db_table = "messages" database = db def build_database(): - # db.create_tables([Message]) - db.create_tables([WebUser]) + db.create_tables([WebUser,Message]) diff --git a/static/js/top-users.js b/static/js/top-users.js index fc76d6b..6705db6 100644 --- a/static/js/top-users.js +++ b/static/js/top-users.js @@ -1,9 +1,8 @@ -const options = { - method: 'POST', +fetch("/top_users?number=5", { + // method: 'POST', headers: {'Content-Type': 'application/json'} -} - -fetch("/top3_users", options) + // body: JSON.stringify({number:5}) +}) .then(response => { if (!response.ok) { throw new Error(`HTTP error: ${response.status}`);