From 88b76bccff8630cca30071151818fa7b831384a0 Mon Sep 17 00:00:00 2001 From: Alberto Casas Ortiz Date: Tue, 20 May 2025 13:58:17 -0700 Subject: [PATCH] Added view to search sessions (by uuid and name). --- mcserver/views.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/mcserver/views.py b/mcserver/views.py index 7384a89..18b074b 100644 --- a/mcserver/views.py +++ b/mcserver/views.py @@ -21,7 +21,7 @@ from django.utils.translation import gettext as _ from django.http import FileResponse from django.db.models import Count -from django.db.models import F +from django.db.models import F, Func from django.views.decorators.csrf import csrf_exempt from django.conf import settings from django.core.mail import EmailMessage @@ -169,6 +169,28 @@ class SessionViewSet(viewsets.ModelViewSet): serializer_class = SessionSerializer permission_classes = [IsPublic | ((IsOwner | IsAdmin | IsBackend))] + @action(detail=False, methods=['get'], permission_classes=[IsAdmin | IsBackend | IsAuthenticated]) + def search_sessions(self, request): + """ + Returns trials where the provided text is part of the session ID or meta.sessionName. + Usage: session/search_sessions/?text=somevalue + """ + text = request.query_params.get('text', '').strip() + if not text: + return Response({'error': 'Missing `text` query parameter.'}, status=400) + + # Match partial ID (UUIDs are strings) or name + sessions = Session.objects.annotate( + id_text=Func(F('id'), function='TEXT') + ).filter( + (Q(id_text__icontains=text) | Q(meta__sessionName__icontains=text)) + & + Q(user=request.user) + ).order_by("-created_at") + + serializer = SessionSerializer(sessions, many=True) + return Response(serializer.data) + @setup_eager_loading def get_queryset(self): """ @@ -1705,7 +1727,6 @@ def modifyTags(self, request, pk): - ## Upload a video: # Input: video and phone_id # Logic: Find the Video model within this session with