@@ -35,6 +35,8 @@ class GalleryAPIView(APIView): required=True, enum=['images', 'videos', 'audios'], ), + OpenApiParameter('limit', int, required=False), + OpenApiParameter('offset', int, required=False), ], responses={200: MessageSerializer(many=True)}, ) @@ -43,11 +45,24 @@ class GalleryAPIView(APIView): List all messages by strategy: images, videos, or audios """ - galleries = self.manager.objects.filter(user=request.user) - out = [] - for gallery in galleries: - out += gallery.output_messages - return Response(MessageSerializer(out, many=True).data, 200) + messages_ids = ( + self.manager.objects.filter(user=request.user) + .prefetch_related('messages') + .values_list('messages', flat=True) + ) + + return Response( + MessageSerializer( + Message.objects.filter(uid__in=messages_ids)[ + int(request.query_params.get('offset', '0')) : int( + request.query_params.get('offset', '0') + ) + + int(request.query_params.get('limit', '10')) + ], + many=True, + ).data, + 200, + ) class MediaAPIView(APIView):