diff --git a/files/classes/leaderboard.py b/files/classes/leaderboard.py index 24f90be95..a1d948932 100644 --- a/files/classes/leaderboard.py +++ b/files/classes/leaderboard.py @@ -200,3 +200,17 @@ class Leaderboard: if not position: position = (leaderboard.count() + 1, 0) leaderboard = leaderboard.limit(limit).all() return (leaderboard, position[0], position[1]) + + @classmethod + def get_effortposts_lb(cls, lb_criteria, v, users, limit, desc): + sq = g.db.query(lb_criteria, cls.count_and_label(lb_criteria), cls.rank_filtered_rank_label_by_desc(lb_criteria)) + sq = sq.filter(Post.effortpost == True) + sq = sq.group_by(lb_criteria).subquery() + sq_criteria = User.id == sq.c.author_id + + leaderboard = g.db.query(User, sq.c.count).join(sq, sq_criteria).order_by(sq.c.count.desc()) + position = g.db.query(User.id, sq.c.rank, sq.c.count).join(sq, sq_criteria).filter(User.id == v.id).one_or_none() + if position: position = (position[1], position[2]) + else: position = (leaderboard.count() + 1, 0) + leaderboard = leaderboard.limit(limit).all() + return (leaderboard, position[0], position[1]) diff --git a/files/routes/leaderboard.py b/files/routes/leaderboard.py index 9c8474a2d..dd4cda76a 100644 --- a/files/routes/leaderboard.py +++ b/files/routes/leaderboard.py @@ -159,3 +159,11 @@ def leaderboard_average_upvotes_per_post(v): def leaderboard_average_upvotes_per_comment(v): leaderboard = Leaderboard("Average upvotes per comment", "average upvotes per comment", "average-upvotes-per-comment", "Average Upvotes per Comment", "comments", Leaderboard.get_avg_upvotes_lb, Comment, v, None, None) return render_template("leaderboard.html", v=v, leaderboard=leaderboard) + +@app.get("/leaderboard/effortposts") +@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400) +@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID) +@auth_required +def leaderboard_effortposts(v): + leaderboard = Leaderboard("Effortposts", "effortposts", "effortposts", "Effortposts", None, Leaderboard.get_effortposts_lb, Post.author_id, v, None, None) + return render_template("leaderboard.html", v=v, leaderboard=leaderboard) diff --git a/files/templates/leaderboard.html b/files/templates/leaderboard.html index 5d38ba11d..9565ee0c5 100644 --- a/files/templates/leaderboard.html +++ b/files/templates/leaderboard.html @@ -28,7 +28,8 @@ Casino winnings (top)Casino winnings (bottom)Average upvotes per post • - Average upvotes per comment + Average upvotes per comment • + Effortposts {% macro format_user_in_table(user, style, position_no, value, user_relative_url) %}