get peer's registered files

This commit is contained in:
afazio1
2024-04-22 03:56:13 -04:00
parent 9fe99e0d96
commit 89749d30ca
5 changed files with 57 additions and 13 deletions

View File

@@ -247,6 +247,7 @@ class FileFilterView(APIView):
professor_id = request.query_params.get("professor")
course_id = request.query_params.get("course")
semester_id = request.query_params.get("semester")
peer_id = request.query_params.get("peer_id")
# Check if provided filter IDs exist
if topic_id and not Topic.objects.filter(id=topic_id).exists():
@@ -269,6 +270,11 @@ class FileFilterView(APIView):
{"error": f"Semester with id {semester_id} does not exist"},
status=status.HTTP_400_BAD_REQUEST,
)
if peer_id and not PeerUser.objects.filter(id=peer_id).exists():
return Response(
{"error": f"Peer with id {peer_id} does not exist"},
status=status.HTTP_400_BAD_REQUEST,
)
# Start with the base queryset
queryset = File.objects.all()
@@ -282,16 +288,20 @@ class FileFilterView(APIView):
queryset = queryset.filter(course__id=course_id)
if semester_id:
queryset = queryset.filter(semester__id=semester_id)
queryset = queryset.annotate(
upvote_count=Count("upvotes"), downvote_count=Count("downvotes")
).order_by(F("downvote_count") - F("upvote_count"))
# Filter files based on active peers in the past hour
active_peer_ids = PeerUser.objects.filter(
last_poll__gte=timezone.now() - timedelta(hours=1)
).values_list("id", flat=True)
queryset = queryset.filter(peer_users__in=active_peer_ids).distinct()
if peer_id:
queryset = queryset.filter(peer_users__in=peer_id)
else:
active_peer_ids = PeerUser.objects.filter(
last_poll__gte=timezone.now() - timedelta(hours=1)
).values_list("id", flat=True)
queryset = queryset.filter(peer_users__in=active_peer_ids).distinct()
serializer = FileSerializer(queryset, many=True)
# Loop through each serialized file to sort its peer_users