Optimize session listing

This commit is contained in:
Lukáš Kucharczyk 2024-01-10 16:57:01 +01:00
parent 01fd7bad69
commit 1f1ed79ee5
Signed by: lukas
SSH Key Fingerprint: SHA256:vMuSwvwAvcT6htVAioMP7rzzwMQNi3roESyhv+nAxeg
3 changed files with 21 additions and 15 deletions

View File

@ -3,7 +3,9 @@
## Improved
* game overview: improve how editions and purchases are displayed
* add purchase: only allow choosing purchases of selected edition
* session list: starting and ending sessions is much faster/doest not reload the page
* session list:
* starting and ending sessions is much faster/doest not reload the page
* listing sessions is much faster
## 1.5.1 / 2023-11-14 21:10+01:00

View File

@ -4,7 +4,7 @@
{{ title }}
{% endblock title %}
{% block content %}
{% if dataset.count >= 1 %}
{% if dataset_count >= 1 %}
<div class="mx-auto text-center my-4">
<a id="last-session-start"
href="{% url 'start_session_same_as_last' last.id %}"
@ -17,7 +17,7 @@
</a>
</div>
{% endif %}
{% if dataset.count != 0 %}
{% if dataset_count != 0 %}
<table class="responsive-table">
<thead>
<tr>

View File

@ -277,35 +277,39 @@ def list_sessions(
context = {}
context["title"] = "Sessions"
dataset = Session.objects.prefetch_related(
"purchase", "purchase__edition", "purchase__edition__game"
).order_by("-timestamp_start")
if filter == "purchase":
dataset = Session.objects.filter(purchase=purchase_id)
dataset = dataset.filter(purchase=purchase_id)
context["purchase"] = Purchase.objects.get(id=purchase_id)
elif filter == "platform":
dataset = Session.objects.filter(purchase__platform=platform_id)
dataset = dataset.filter(purchase__platform=platform_id)
context["platform"] = Platform.objects.get(id=platform_id)
elif filter == "edition":
dataset = Session.objects.filter(purchase__edition=edition_id)
dataset = dataset.filter(purchase__edition=edition_id)
context["edition"] = Edition.objects.get(id=edition_id)
elif filter == "game":
dataset = Session.objects.filter(purchase__edition__game=game_id)
dataset = dataset.filter(purchase__edition__game=game_id)
context["game"] = Game.objects.get(id=game_id)
elif filter == "ownership_type":
dataset = Session.objects.filter(purchase__ownership_type=ownership_type)
dataset = dataset.filter(purchase__ownership_type=ownership_type)
context["ownership_type"] = dict(Purchase.OWNERSHIP_TYPES)[ownership_type]
elif filter == "recent":
current_year = timezone.now().year
first_day_of_year = timezone.make_aware(datetime(current_year, 1, 1))
dataset = Session.objects.filter(
timestamp_start__gte=first_day_of_year
).order_by("-timestamp_start")
dataset = dataset.filter(timestamp_start__gte=first_day_of_year).order_by(
"-timestamp_start"
)
context["title"] = "This year"
else:
# by default, sort from newest to oldest
dataset = Session.objects.order_by("-timestamp_start")
context["dataset"] = dataset
context["dataset_count"] = dataset.count()
try:
context["last"] = Session.objects.latest()
context["last"] = Session.objects.prefetch_related(
"purchase__platform"
).latest()
except ObjectDoesNotExist:
context["last"] = None