forked from rDrama/rDrama
more query optimization v3
parent
3e87b20ed0
commit
ed86ec1c14
|
@ -128,7 +128,7 @@ class User(Base):
|
||||||
custom_filter_list = Column(String)
|
custom_filter_list = Column(String)
|
||||||
discord_id = Column(String)
|
discord_id = Column(String)
|
||||||
ban_evade = Column(Integer, default=0)
|
ban_evade = Column(Integer, default=0)
|
||||||
original_username = deferred(Column(String))
|
original_username = Column(String)
|
||||||
referred_by = Column(Integer, ForeignKey("users.id"))
|
referred_by = Column(Integer, ForeignKey("users.id"))
|
||||||
can_gamble = Column(Boolean, default=True)
|
can_gamble = Column(Boolean, default=True)
|
||||||
currently_held_lottery_tickets = Column(Integer, default=0)
|
currently_held_lottery_tickets = Column(Integer, default=0)
|
||||||
|
@ -433,11 +433,8 @@ class User(Base):
|
||||||
|
|
||||||
awards = {}
|
awards = {}
|
||||||
|
|
||||||
posts_idlist = [x[0] for x in g.db.query(Submission.id).filter_by(author_id=self.id).all()]
|
post_awards = g.db.query(AwardRelationship).join(AwardRelationship.post).filter(Submission.author_id == self.id).all()
|
||||||
comments_idlist = [x[0] for x in g.db.query(Comment.id).filter_by(author_id=self.id).all()]
|
comment_awards = g.db.query(AwardRelationship).join(AwardRelationship.comment).filter(Comment.author_id == self.id).all()
|
||||||
|
|
||||||
post_awards = g.db.query(AwardRelationship).filter(AwardRelationship.submission_id.in_(posts_idlist)).all()
|
|
||||||
comment_awards = g.db.query(AwardRelationship).filter(AwardRelationship.comment_id.in_(comments_idlist)).all()
|
|
||||||
|
|
||||||
total_awards = post_awards + comment_awards
|
total_awards = post_awards + comment_awards
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from files.classes import *
|
from files.classes import *
|
||||||
from flask import g
|
from flask import g
|
||||||
from sqlalchemy.orm import joinedload
|
from sqlalchemy.orm import joinedload, undefer
|
||||||
|
|
||||||
def get_id(username, v=None, graceful=False):
|
def get_id(username, v=None, graceful=False):
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ def get_id(username, v=None, graceful=False):
|
||||||
return user[0]
|
return user[0]
|
||||||
|
|
||||||
|
|
||||||
def get_user(username, v=None, graceful=False):
|
def get_user(username, v=None, graceful=False, rendered=False):
|
||||||
|
|
||||||
if not username:
|
if not username:
|
||||||
if not graceful: abort(404)
|
if not graceful: abort(404)
|
||||||
|
@ -39,13 +39,25 @@ def get_user(username, v=None, graceful=False):
|
||||||
User.username.ilike(username),
|
User.username.ilike(username),
|
||||||
User.original_username.ilike(username)
|
User.original_username.ilike(username)
|
||||||
)
|
)
|
||||||
).one_or_none()
|
)
|
||||||
|
|
||||||
|
if rendered:
|
||||||
|
user = user.options(
|
||||||
|
undefer('reserved'),
|
||||||
|
undefer('profilecss'),
|
||||||
|
undefer('bio'),
|
||||||
|
undefer('friends_html'),
|
||||||
|
undefer('enemies_html'),
|
||||||
|
joinedload(User.badges)
|
||||||
|
)
|
||||||
|
|
||||||
|
user = user.one_or_none()
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
if not graceful: abort(404)
|
if not graceful: abort(404)
|
||||||
else: return None
|
else: return None
|
||||||
|
|
||||||
if v:
|
if rendered v and v.id != user.id:
|
||||||
block = g.db.query(UserBlock).filter(
|
block = g.db.query(UserBlock).filter(
|
||||||
or_(
|
or_(
|
||||||
and_(
|
and_(
|
||||||
|
@ -289,6 +301,11 @@ def get_comments(cids, v=None, load_parent=False):
|
||||||
blocked,
|
blocked,
|
||||||
blocked.c.user_id == Comment.author_id,
|
blocked.c.user_id == Comment.author_id,
|
||||||
isouter=True
|
isouter=True
|
||||||
|
).options(
|
||||||
|
joinedload(Comment.post),
|
||||||
|
joinedload(Comment.flags),
|
||||||
|
joinedload(Comment.awards),
|
||||||
|
joinedload(Comment.options).joinedload(CommentOption.votes)
|
||||||
).all()
|
).all()
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
|
|
|
@ -872,7 +872,14 @@ def u_username(username, v=None):
|
||||||
if not v and not request.path.startswith('/logged_out'): return redirect(f"/logged_out{request.full_path}")
|
if not v and not request.path.startswith('/logged_out'): return redirect(f"/logged_out{request.full_path}")
|
||||||
if v and request.path.startswith('/logged_out'): return redirect(request.full_path.replace('/logged_out',''))
|
if v and request.path.startswith('/logged_out'): return redirect(request.full_path.replace('/logged_out',''))
|
||||||
|
|
||||||
u = get_user(username, v=v)
|
u = get_user(username, v=v, rendered=True)
|
||||||
|
|
||||||
|
if v and username == v.username:
|
||||||
|
is_following = False
|
||||||
|
u.is_blocked = False
|
||||||
|
u.is_blocking = False
|
||||||
|
else:
|
||||||
|
is_following = (v and u.has_follower(v))
|
||||||
|
|
||||||
|
|
||||||
if username != u.username:
|
if username != u.username:
|
||||||
|
@ -885,7 +892,7 @@ def u_username(username, v=None):
|
||||||
if u.shadowbanned and not (v and v.admin_level >= 2) and not (v and v.id == u.id):
|
if u.shadowbanned and not (v and v.admin_level >= 2) and not (v and v.id == u.id):
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
if v and v.id not in (u.id,DAD_ID) and (u.patron or u.admin_level > 1):
|
if v and v.id not in (u.id, DAD_ID) and (u.patron or u.admin_level > 1):
|
||||||
view = g.db.query(ViewerRelationship).filter_by(viewer_id=v.id, user_id=u.id).one_or_none()
|
view = g.db.query(ViewerRelationship).filter_by(viewer_id=v.id, user_id=u.id).one_or_none()
|
||||||
|
|
||||||
if view: view.last_view_utc = int(time.time())
|
if view: view.last_view_utc = int(time.time())
|
||||||
|
@ -939,7 +946,7 @@ def u_username(username, v=None):
|
||||||
sort=sort,
|
sort=sort,
|
||||||
t=t,
|
t=t,
|
||||||
next_exists=next_exists,
|
next_exists=next_exists,
|
||||||
is_following=(v and u.has_follower(v)))
|
is_following=is_following)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -952,7 +959,7 @@ def u_username(username, v=None):
|
||||||
sort=sort,
|
sort=sort,
|
||||||
t=t,
|
t=t,
|
||||||
next_exists=next_exists,
|
next_exists=next_exists,
|
||||||
is_following=(v and u.has_follower(v)))
|
is_following=is_following)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/@<username>/comments")
|
@app.get("/@<username>/comments")
|
||||||
|
@ -963,7 +970,14 @@ def u_username_comments(username, v=None):
|
||||||
if not v and not request.path.startswith('/logged_out'): return redirect(f"/logged_out{request.full_path}")
|
if not v and not request.path.startswith('/logged_out'): return redirect(f"/logged_out{request.full_path}")
|
||||||
if v and request.path.startswith('/logged_out'): return redirect(request.full_path.replace('/logged_out',''))
|
if v and request.path.startswith('/logged_out'): return redirect(request.full_path.replace('/logged_out',''))
|
||||||
|
|
||||||
user = get_user(username, v=v)
|
user = get_user(username, v=v, rendered=True)
|
||||||
|
|
||||||
|
if v and username == v.username:
|
||||||
|
is_following = False
|
||||||
|
user.is_blocked = False
|
||||||
|
user.is_blocking = False
|
||||||
|
else:
|
||||||
|
is_following = (v and user.has_follower(v))
|
||||||
|
|
||||||
if username != user.username: return redirect(f'/@{user.username}/comments')
|
if username != user.username: return redirect(f'/@{user.username}/comments')
|
||||||
|
|
||||||
|
@ -1029,8 +1043,6 @@ def u_username_comments(username, v=None):
|
||||||
|
|
||||||
listing = get_comments(ids, v=v)
|
listing = get_comments(ids, v=v)
|
||||||
|
|
||||||
is_following = (v and user.has_follower(v))
|
|
||||||
|
|
||||||
if request.headers.get("Authorization"): return {"data": [c.json for c in listing]}
|
if request.headers.get("Authorization"): return {"data": [c.json for c in listing]}
|
||||||
return render_template("userpage_comments.html", u=user, v=v, listing=listing, page=page, sort=sort, t=t,next_exists=next_exists, is_following=is_following, standalone=True)
|
return render_template("userpage_comments.html", u=user, v=v, listing=listing, page=page, sort=sort, t=t,next_exists=next_exists, is_following=is_following, standalone=True)
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,12 @@
|
||||||
{% set downs=c.downvotes %}
|
{% set downs=c.downvotes %}
|
||||||
{% set score=ups-downs %}
|
{% set score=ups-downs %}
|
||||||
|
|
||||||
{% if v and (v.shadowbanned or v.admin_level >= 2) %}
|
{% if render_replies %}
|
||||||
{% set replies=c.replies3(sort) %}
|
{% if v and (v.shadowbanned or v.admin_level >= 2) %}
|
||||||
{% else %}
|
{% set replies=c.replies3(sort) %}
|
||||||
{% set replies=c.replies(sort) %}
|
{% else %}
|
||||||
|
{% set replies=c.replies(sort) %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if c.is_blocking or (c.is_banned or c.deleted_utc) and not (v and v.admin_level > 1) and not (v and v.id==c.author_id) %}
|
{% if c.is_blocking or (c.is_banned or c.deleted_utc) and not (v and v.admin_level > 1) and not (v and v.id==c.author_id) %}
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
<i class="fas fa-broom text-admin align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Admin"></i>
|
<i class="fas fa-broom text-admin align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Admin"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if v and v.has_follower(u) %}
|
{% if v and v.id != u.id and v.has_follower(u) %}
|
||||||
<span class="followsyou badge badge-secondary text-small align-middle ml-2" id="profile--follows-you">Follows you</span>
|
<span class="followsyou badge badge-secondary text-small align-middle ml-2" id="profile--follows-you">Follows you</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="profile-actions align-middle d-none ml-2">
|
<div class="profile-actions align-middle d-none ml-2">
|
||||||
|
@ -405,7 +405,7 @@
|
||||||
<i class="fas fa-broom text-admin align-middle ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Admin"></i>
|
<i class="fas fa-broom text-admin align-middle ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Admin"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if v and v.has_follower(u) and not v.is_nofollow %}
|
{% if v and v.id != u.id and v.has_follower(u) and not v.is_nofollow %}
|
||||||
<span class="followsyou badge badge-secondary text-small align-middle mx-1" id="profile--follows-you">Follows you</span>
|
<span class="followsyou badge badge-secondary text-small align-middle mx-1" id="profile--follows-you">Follows you</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}" id="profile--flair">{{u.customtitle | safe}}</p>
|
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}" id="profile--flair">{{u.customtitle | safe}}</p>
|
||||||
|
|
Loading…
Reference in New Issue