46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from account.decorators import teacher_admin_required
|
|
from utils.api import APIView
|
|
|
|
from ..models import AIAnalysis
|
|
from ..serializers import AIAnalysisDetailSerializer, AIAnalysisListSerializer
|
|
|
|
|
|
class AIAnalysisAdminAPI(APIView):
|
|
@teacher_admin_required
|
|
def get(self, request):
|
|
report_id = request.GET.get("id")
|
|
if report_id:
|
|
try:
|
|
report = AIAnalysis.objects.select_related("user").get(id=report_id)
|
|
except AIAnalysis.DoesNotExist:
|
|
return self.error("AIAnalysis not found")
|
|
return self.success(AIAnalysisDetailSerializer(report).data)
|
|
|
|
qs = AIAnalysis.objects.select_related("user").order_by("-create_time")
|
|
|
|
username = request.GET.get("username")
|
|
if username:
|
|
qs = qs.filter(user__username__icontains=username)
|
|
|
|
if request.GET.get("pinned_only") == "true":
|
|
pinned = qs.filter(is_pinned=True)
|
|
return self.success(AIAnalysisListSerializer(pinned, many=True).data)
|
|
|
|
return self.success(self.paginate_data(request, qs, AIAnalysisListSerializer))
|
|
|
|
@teacher_admin_required
|
|
def post(self, request):
|
|
report_id = request.data.get("id")
|
|
try:
|
|
report = AIAnalysis.objects.select_related("user").get(id=report_id)
|
|
except AIAnalysis.DoesNotExist:
|
|
return self.error("AIAnalysis not found")
|
|
|
|
if report.is_pinned:
|
|
report.is_pinned = False
|
|
else:
|
|
AIAnalysis.objects.filter(user=report.user, is_pinned=True).update(is_pinned=False)
|
|
report.is_pinned = True
|
|
report.save(update_fields=["is_pinned"])
|
|
return self.success({"is_pinned": report.is_pinned})
|