Skip to content

Commit b3111e2

Browse files
authored
Merge pull request #284 from opencap-org/dev
Get mono sessions endpoint with time range and status filter
2 parents 2dc903d + e0fdc26 commit b3111e2

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

mcserver/serializers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,12 @@ class SessionFilteringSerializer(serializers.Serializer):
279279
username = serializers.CharField(max_length=64, required=False)
280280

281281

282+
class MonoSessionFilterSerializer(serializers.Serializer):
283+
date_from = serializers.DateField(required=False)
284+
date_to = serializers.DateField(required=False)
285+
status = serializers.CharField(max_length=64, required=False)
286+
287+
282288
class TagSerializer(serializers.ModelSerializer):
283289
class Meta:
284290
model = SubjectTags

mcserver/views.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,43 @@ def search_sessions(self, request):
201201
serializer = SessionSerializer(sessions, many=True)
202202
return Response(serializer.data)
203203

204+
@action(detail=False, methods=['get'], permission_classes=[IsAdmin | IsBackend | IsAuthenticated])
205+
def get_mono_sessions(self, request):
206+
"""
207+
Returns sessions where isMono=True, optionally filtered by created_at date range and status.
208+
Usage: /sessions/get_mono_sessions/?date_from=YYYY-MM-DD&date_to=YYYY-MM-DD&status=done
209+
"""
210+
from .serializers import MonoSessionFilterSerializer
211+
212+
filter_serializer = MonoSessionFilterSerializer(data=request.query_params)
213+
if not filter_serializer.is_valid():
214+
return Response(filter_serializer.errors, status=400)
215+
216+
filter_kwargs = {'isMono': True}
217+
date_from = filter_serializer.validated_data.get('date_from')
218+
date_to = filter_serializer.validated_data.get('date_to')
219+
status = filter_serializer.validated_data.get('status')
220+
221+
if date_from is None and date_to is None:
222+
today = timezone.now().date()
223+
filter_kwargs['created_at__date__gte'] = today - timedelta(days=30)
224+
filter_kwargs['created_at__date__lte'] = today
225+
else:
226+
if date_from:
227+
filter_kwargs['created_at__date__gte'] = date_from
228+
if date_to:
229+
filter_kwargs['created_at__date__lte'] = date_to
230+
231+
if status:
232+
filter_kwargs['status'] = status
233+
234+
if not IsAdmin().has_permission(request, self) and not IsBackend().has_permission(request, self):
235+
filter_kwargs['user'] = request.user
236+
237+
sessions = Session.objects.filter(**filter_kwargs).order_by("-created_at")
238+
serializer = SessionSerializer(sessions, many=True)
239+
return Response(serializer.data)
240+
204241
@setup_eager_loading
205242
def get_queryset(self):
206243
"""

0 commit comments

Comments
 (0)