forked from rDrama/rDrama
restore upvotes given leaderboard (testing on dev.rdrama.net)
parent
ef5c925511
commit
8f7a0bc4e7
|
@ -1,4 +1,5 @@
|
||||||
from typing import Any, Callable, Optional, Tuple, Union
|
from typing import Any, Callable, Optional, Tuple, Union
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
from sqlalchemy import Column, func
|
from sqlalchemy import Column, func
|
||||||
from sqlalchemy.orm import scoped_session
|
from sqlalchemy.orm import scoped_session
|
||||||
|
@ -9,6 +10,8 @@ from .badges import Badge
|
||||||
from .emoji import *
|
from .emoji import *
|
||||||
from .user import User
|
from .user import User
|
||||||
from .userblock import UserBlock
|
from .userblock import UserBlock
|
||||||
|
from .votes import Vote, CommentVote
|
||||||
|
|
||||||
|
|
||||||
class Leaderboard:
|
class Leaderboard:
|
||||||
"""
|
"""
|
||||||
|
@ -100,3 +103,34 @@ class Leaderboard:
|
||||||
if not position: position = (leaderboard.count() + 1, 0)
|
if not position: position = (leaderboard.count() + 1, 0)
|
||||||
leaderboard = leaderboard.limit(limit).all()
|
leaderboard = leaderboard.limit(limit).all()
|
||||||
return (leaderboard, position[0], position[1])
|
return (leaderboard, position[0], position[1])
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_upvotes_lb(cls, lb_criteria, v:User, db:scoped_session, users:Any, limit):
|
||||||
|
t1 = time.time()
|
||||||
|
|
||||||
|
votes1 = db.query(Vote.user_id, func.count(Vote.user_id)).filter(Vote.vote_type==1).group_by(Vote.user_id).order_by(func.count(Vote.user_id).desc()).all()
|
||||||
|
votes2 = db.query(CommentVote.user_id, func.count(CommentVote.user_id)).filter(CommentVote.vote_type==1).group_by(CommentVote.user_id).order_by(func.count(CommentVote.user_id).desc()).all()
|
||||||
|
votes3 = Counter(dict(votes1)) + Counter(dict(votes2))
|
||||||
|
users14 = db.query(User).filter(User.id.in_(votes3.keys())).all()
|
||||||
|
users13 = []
|
||||||
|
for user in users14:
|
||||||
|
users13.append((user.id, votes3[user.id]-user.post_count-user.comment_count))
|
||||||
|
if not users13: users13 = [(None,None)]
|
||||||
|
users13 = sorted(users13, key=lambda x: x[1], reverse=True)
|
||||||
|
users13_1, users13_2 = zip(*users13[:25])
|
||||||
|
|
||||||
|
t2 = time.time()
|
||||||
|
print(f"first block duration: {t2-t1}")
|
||||||
|
|
||||||
|
users13_accs = db.query(User).filter(User.id.in_(users13_1)).all()
|
||||||
|
users13_accs = sorted(users13_accs, key=lambda x: users13_1.index(x.id))
|
||||||
|
users13_accs = tuple(zip(users13_accs, users13_2))
|
||||||
|
try:
|
||||||
|
pos13 = [x[0] for x in users13].index(v.id)
|
||||||
|
pos13 = (pos13+1, users13[pos13][1])
|
||||||
|
except: pos13 = (len(users13)+1, 0)
|
||||||
|
|
||||||
|
t3 = time.time()
|
||||||
|
print(f"second block duration: {t3-t2}")
|
||||||
|
|
||||||
|
return (users13_accs, pos13[0], pos13[1])
|
||||||
|
|
|
@ -411,7 +411,9 @@ def leaderboard(v:User):
|
||||||
|
|
||||||
owned_hats = Leaderboard("Owned hats", "owned hats", "owned-hats", "Owned Hats", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, g.db, None)
|
owned_hats = Leaderboard("Owned hats", "owned hats", "owned-hats", "Owned Hats", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, g.db, None)
|
||||||
|
|
||||||
leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, blocks, owned_hats]
|
upvotes_given = Leaderboard("Upvotes given", "upvotes given", "upvotes-given", "Upvotes Given", "upvoting", Leaderboard.get_upvotes_lb, None, v, None, g.db, None)
|
||||||
|
|
||||||
|
leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, blocks, owned_hats, upvotes_given]
|
||||||
|
|
||||||
if SITE == 'rdrama.net':
|
if SITE == 'rdrama.net':
|
||||||
leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None))
|
leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None))
|
||||||
|
|
Loading…
Reference in New Issue