Compare commits

...

2 Commits

Author SHA1 Message Date
Lukáš Kucharczyk 2bd07e5f2d Remove cruft
continuous-integration/drone/push Build is passing Details
2023-11-02 15:14:57 +01:00
Lukáš Kucharczyk 058b83522c Group by game instead of purchase 2023-11-02 15:14:50 +01:00
2 changed files with 21 additions and 20 deletions

View File

@ -39,14 +39,14 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for purchase in top_10_by_playtime %} {% for game in top_10_games_by_playtime %}
<tr> <tr>
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono"> <td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">
<a href="{% url 'view_game' purchase.edition.game.id %}">{{ purchase.edition.name }} <a href="{% url 'view_game' game.id %}">{{ game.name }}
</a> </a>
</td> </td>
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ purchase.formatted_playtime }}</td> <td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ game.formatted_playtime }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View File

@ -247,25 +247,27 @@ def stats(request, year: int = 0):
timestamp_start__gte=first_day_of_year timestamp_start__gte=first_day_of_year
).filter(timestamp_start__lt=last_day_of_year) ).filter(timestamp_start__lt=last_day_of_year)
year_purchases = Purchase.objects.filter(session__in=year_sessions).distinct() year_purchases = Purchase.objects.filter(session__in=year_sessions).distinct()
year_purchases_with_playtime = year_purchases.annotate(
total_playtime=Sum( games_with_playtime = (
F("session__duration_calculated") + F("session__duration_manual") Game.objects.filter(edition__purchase__session__in=year_sessions)
.annotate(
total_playtime=Sum(
F("edition__purchase__session__duration_calculated")
+ F("edition__purchase__session__duration_manual")
)
) )
.values("id", "name", "total_playtime")
) )
top_10_by_playtime = year_purchases_with_playtime.order_by("-total_playtime")[:10] top_10_games_by_playtime = games_with_playtime.order_by("-total_playtime")[:10]
for purchase in top_10_by_playtime: for game in top_10_games_by_playtime:
purchase.formatted_playtime = format_duration(purchase.total_playtime, "%2.0H") game["formatted_playtime"] = format_duration(game["total_playtime"], "%2.0H")
total_playtime_per_platform = ( total_playtime_per_platform = (
year_sessions.values("purchase__platform__name") # Group by platform name year_sessions.values("purchase__platform__name")
.annotate( .annotate(total_playtime=Sum(F("duration_calculated") + F("duration_manual")))
total_playtime=Sum(F("duration_calculated") + F("duration_manual")) .annotate(platform_name=F("purchase__platform__name"))
) # Sum the duration_calculated for each group .values("platform_name", "total_playtime")
.annotate(platform_name=F("purchase__platform__name")) # Rename the field .order_by("-total_playtime")
.values(
"platform_name", "total_playtime"
) # Select the renamed field and total_playtime
.order_by("-total_playtime") # Optional: Order by the renamed platform name
) )
for item in total_playtime_per_platform: for item in total_playtime_per_platform:
item["formatted_playtime"] = format_duration(item["total_playtime"], "%2.0H") item["formatted_playtime"] = format_duration(item["total_playtime"], "%2.0H")
@ -276,8 +278,7 @@ def stats(request, year: int = 0):
), ),
"total_games": year_purchases.count(), "total_games": year_purchases.count(),
"total_2023_games": year_purchases.filter(edition__year_released=year).count(), "total_2023_games": year_purchases.filter(edition__year_released=year).count(),
"top_10_by_playtime_formatted": top_10_by_playtime, "top_10_games_by_playtime": top_10_games_by_playtime,
"top_10_by_playtime": top_10_by_playtime,
"year": year, "year": year,
"total_playtime_per_platform": total_playtime_per_platform, "total_playtime_per_platform": total_playtime_per_platform,
} }