@@ -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