from django.http import JsonResponse from rest_framework.views import APIView from rest_framework import status from rest_framework.decorators import permission_classes from rest_framework.permissions import AllowAny from ..models import CompressionHistory from ..serializers import CompressionHistorySerializer @permission_classes([AllowAny]) class CompressionHistoryListView(APIView): def get(self, request): user = request.user if request.user.is_authenticated else None session_id = request.query_params.get('session_id') if user: histories = CompressionHistory.objects.filter(user=user) elif session_id: histories = CompressionHistory.objects.filter(session_id=session_id) else: return JsonResponse({ 'success': True, 'data': [], 'total': 0 }) page = int(request.query_params.get('page', 1)) page_size = int(request.query_params.get('page_size', 20)) start = (page - 1) * page_size end = start + page_size total = histories.count() serializer = CompressionHistorySerializer(histories[start:end], many=True) return JsonResponse({ 'success': True, 'data': serializer.data, 'total': total, 'page': page, 'page_size': page_size }) def post(self, request): data = request.data.copy() if request.user.is_authenticated: data['user'] = request.user.id serializer = CompressionHistorySerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse({ 'success': True, 'data': serializer.data }, status=status.HTTP_201_CREATED) return JsonResponse({ 'error': '参数错误', 'details': serializer.errors }, status=status.HTTP_400_BAD_REQUEST) @permission_classes([AllowAny]) class CompressionHistoryDetailView(APIView): def delete(self, request, pk): user = request.user if request.user.is_authenticated else None session_id = request.query_params.get('session_id') try: if user: history = CompressionHistory.objects.get(pk=pk, user=user) elif session_id: history = CompressionHistory.objects.get(pk=pk, session_id=session_id) else: return JsonResponse( {'error': '无权限删除'}, status=status.HTTP_403_FORBIDDEN ) history.delete() return JsonResponse({'success': True}) except CompressionHistory.DoesNotExist: return JsonResponse( {'error': '记录不存在'}, status=status.HTTP_404_NOT_FOUND ) @permission_classes([AllowAny]) class CompressionHistoryClearView(APIView): def delete(self, request): user = request.user if request.user.is_authenticated else None session_id = request.query_params.get('session_id') if user: count, _ = CompressionHistory.objects.filter(user=user).delete() elif session_id: count, _ = CompressionHistory.objects.filter(session_id=session_id).delete() else: return JsonResponse( {'error': '无权限清空'}, status=status.HTTP_403_FORBIDDEN ) return JsonResponse({ 'success': True, 'deleted_count': count })