From 33302b91761d92560b20ff93de412cf7a4e55769 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 11 Sep 2025 09:55:35 -0400 Subject: [PATCH 1/2] Added recent events api --- hvzsite/hvz/urls.py | 1 + hvzsite/hvz/views.py | 64 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/hvzsite/hvz/urls.py b/hvzsite/hvz/urls.py index 8b41354..3f99c1d 100644 --- a/hvzsite/hvz/urls.py +++ b/hvzsite/hvz/urls.py @@ -111,6 +111,7 @@ re_path(r'^api/reports/?$', views.ApiReports.as_view()), re_path(r'^api/create-av/?$', views.ApiCreateAv.as_view()), re_path(r'^api/create-armor/?$', views.ApiCreateBodyArmor.as_view()), + re_path(r'^api/recent_events/?$', views.recent_events_view), # Api Documentation re_path(r'^openapi/?$', get_schema_view( diff --git a/hvzsite/hvz/views.py b/hvzsite/hvz/views.py index e743375..98f784a 100644 --- a/hvzsite/hvz/views.py +++ b/hvzsite/hvz/views.py @@ -102,7 +102,71 @@ def index(request): 'zombiecounts': zombiecounts, 'humancounts': humancounts, 'scoreboards': scoreboards}) +@api_view(["GET"]) +def recent_events_view(request): + game = get_active_game() + if len(most_recent_tags := Tag.objects.filter(game=game).order_by('-timestamp')) > 0: + most_recent_tag = most_recent_tags[0] + else: + most_recent_tag = None + if len(most_recent_avs := AntiVirus.objects.filter(game=game, used_by__isnull=False).order_by('-time_used')) > 0: + most_recent_av = most_recent_avs[0] + else: + most_recent_av = None + if len(most_recent_registrations := PlayerStatus.objects.filter(game=game).order_by("-activation_timestamp")) > 0: + most_recent_registration = most_recent_registrations[0] + else: + most_recent_registration = None + (humancount, zombiecount, most_tags, merged_recents, timestamps, zombiecounts, humancounts) = get_recent_events( + most_recent_tag, most_recent_av, most_recent_registration) + + authed = request.user.is_authenticated + data = { + "humancount": humancount, + "zombiecount": zombiecount, + "most_tags": [ + { + 'player_uuid': h.player.player_uuid, + 'player_name': h.player.readable_name(authed), + 'tags': h.num_tags + } for h in most_tags + ], + "recent_events": [ + { + 'type': "av", + 'av_uuid': e.av_uuid, + 'time_used': e.time_used, + 'used_by': { + 'player_uuid': e.used_by.player_uuid, + 'player_name': e.used_by.readable_name(authed), + } + } + if isinstance(e, AntiVirus) else + { + "type": 'tag', + "tagger": { + "player_uuid": e.tagger.player_uuid, + "player_name": e.tagger.readable_name(authed) + } if e.tagger is not None else {}, + "taggee": { + "player_uuid": e.taggee.player_uuid, + "player_name": e.taggee.readable_name(authed) + } if e.taggee is not None else {}, + "armor_taggee": { + "armor_uuid": e.armor_taggee.armor_uuid + } if e.armor_taggee is not None else {}, + "timestamp": e.timestamp + } for e in merged_recents + ], + "zombiecounts": [ + z for z in zombiecounts + ], + "humancounts": [ + h for h in humancounts + ] + } + return JsonResponse(data) def infection(request): game = get_active_game() From c4db6798a166d7c39dfb0cecf8a8c131d3380aad Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 11 Sep 2025 10:59:17 -0400 Subject: [PATCH 2/2] Missed the timestamps attribute --- hvzsite/hvz/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hvzsite/hvz/views.py b/hvzsite/hvz/views.py index 98f784a..94d07db 100644 --- a/hvzsite/hvz/views.py +++ b/hvzsite/hvz/views.py @@ -159,6 +159,9 @@ def recent_events_view(request): "timestamp": e.timestamp } for e in merged_recents ], + "timestamps": [ + t for t in timestamps + ], "zombiecounts": [ z for z in zombiecounts ],