109 lines
3.5 KiB
Python
109 lines
3.5 KiB
Python
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
|
|
})
|