forked from MarseyWorld/MarseyWorld
Reduce query volume in user.user_awards.
The User model class method user_awards previously made one query per type of award. This has been replaced with a new query that retrieves all owned award quantities at once using GROUP BY.master
parent
f184351d5d
commit
7b38be0101
|
@ -20,6 +20,7 @@ from .sub_block import *
|
||||||
from .submission import sort_posts
|
from .submission import sort_posts
|
||||||
from files.__main__ import Base, cache
|
from files.__main__ import Base, cache
|
||||||
from files.helpers.security import *
|
from files.helpers.security import *
|
||||||
|
from copy import deepcopy
|
||||||
import random
|
import random
|
||||||
from os import environ, remove, path
|
from os import environ, remove, path
|
||||||
|
|
||||||
|
@ -246,12 +247,18 @@ class User(Base):
|
||||||
@property
|
@property
|
||||||
@lazy
|
@lazy
|
||||||
def user_awards(self):
|
def user_awards(self):
|
||||||
|
|
||||||
return_value = list(AWARDS2.values())
|
return_value = list(AWARDS2.values())
|
||||||
|
|
||||||
user_awards = g.db.query(AwardRelationship).filter_by(user_id=self.id)
|
awards_owned = g.db.query(AwardRelationship.kind, func.count()) \
|
||||||
|
.filter_by(user_id=self.id, submission_id=None, comment_id=None) \
|
||||||
|
.group_by(AwardRelationship.kind).all()
|
||||||
|
awards_owned = dict(awards_owned)
|
||||||
|
|
||||||
for val in return_value: val['owned'] = user_awards.filter_by(kind=val['kind'], submission_id=None, comment_id=None).count()
|
for val in return_value:
|
||||||
|
if val['kind'] in awards_owned:
|
||||||
|
val['owned'] = awards_owned[val['kind']]
|
||||||
|
else:
|
||||||
|
val['owned'] = 0
|
||||||
|
|
||||||
return return_value
|
return return_value
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue