Load seen time in the same query as tickets
Use left join to load related TicketSeen objects along with Tickets instead of doing a query per ticket when rendering.
This commit is contained in:
parent
dc0de33664
commit
c7ed6615da
|
@ -10,13 +10,14 @@ from todosrht.search import apply_search
|
|||
from todosrht.types import TicketSubscription
|
||||
from todosrht.types import Event, EventType, EventNotification
|
||||
from todosrht.types import Tracker, Ticket, TicketStatus, TicketAccess
|
||||
from todosrht.types import Label, TicketLabel
|
||||
from todosrht.types import Label, TicketLabel, TicketSeen
|
||||
from todosrht.urls import tracker_url
|
||||
from srht.config import cfg
|
||||
from srht.database import db
|
||||
from srht.flask import paginate_query, loginrequired
|
||||
from srht.validation import Validation
|
||||
from datetime import datetime
|
||||
from sqlalchemy import and_
|
||||
|
||||
tracker = Blueprint("tracker", __name__)
|
||||
|
||||
|
@ -97,7 +98,14 @@ def return_tracker(tracker, access, **kwargs):
|
|||
).one_or_none()
|
||||
is_subscribed = bool(sub)
|
||||
|
||||
tickets = Ticket.query.filter(Ticket.tracker_id == tracker.id)
|
||||
tickets = (db.session
|
||||
.query(Ticket, TicketSeen)
|
||||
.filter(Ticket.tracker_id == tracker.id)
|
||||
.outerjoin(TicketSeen, and_(
|
||||
TicketSeen.ticket_id == Ticket.id,
|
||||
TicketSeen.user == current_user,
|
||||
)))
|
||||
|
||||
search = request.args.get("search")
|
||||
tickets = tickets.order_by(Ticket.updated.desc())
|
||||
if search:
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
</form>
|
||||
{% if len(tickets) %}
|
||||
<div class="ticket-list">
|
||||
{% for ticket in tickets %}
|
||||
{% for ticket, seen in tickets %}
|
||||
<div class="id">
|
||||
<a href="{{ ticket|ticket_url }}">#{{ticket.scoped_id}}</a>
|
||||
</div>
|
||||
|
@ -154,7 +154,7 @@
|
|||
{{ ticket.submitter }}
|
||||
</a>
|
||||
</div>
|
||||
{% if ticket.new_updates(current_user) %}
|
||||
{% if seen and seen.last_view >= ticket.updated %}
|
||||
<div class="comments">
|
||||
{{icon("comments-o")}}
|
||||
{{ ticket.comments | length }}
|
||||
|
|
|
@ -51,14 +51,3 @@ class Ticket(Base):
|
|||
|
||||
view_list = sa.orm.relationship("TicketSeen")
|
||||
labels = sa.orm.relationship("Label", secondary="ticket_label")
|
||||
|
||||
def new_updates(self, user):
|
||||
if not user:
|
||||
return None
|
||||
seen = (TicketSeen.query
|
||||
.filter(TicketSeen.user_id == user.id,
|
||||
TicketSeen.ticket_id == self.id)
|
||||
.one_or_none())
|
||||
if seen:
|
||||
return seen.last_view >= self.updated
|
||||
return None
|
||||
|
|
Loading…
Reference in New Issue