Files
hossein-por-shop/backend/ticket/views.py
T
2024-12-14 14:28:47 +03:30

65 lines
2.3 KiB
Python

from rest_framework import generics, permissions
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Ticket, Message
from .serializers import TicketSerializer, MessageSerializer
class TicketCreateView(generics.CreateAPIView):
queryset = Ticket.objects.all()
serializer_class = TicketSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
serializer.save(customer=self.request.user)
class TicketListView(generics.ListAPIView):
serializer_class = TicketSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
user = self.request.user
if user.is_staff:
return Ticket.objects.all()
return Ticket.objects.filter(customer=user)
class TicketDetailView(generics.RetrieveAPIView):
queryset = Ticket.objects.all()
serializer_class = TicketSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
user = self.request.user
if user.is_staff:
return Ticket.objects.all()
return Ticket.objects.filter(customer=user)
class MessageCreateView(generics.CreateAPIView):
queryset = Message.objects.all()
serializer_class = MessageSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
ticket = serializer.validated_data.get('ticket')
if self.request.user != ticket.customer and not self.request.user.is_staff:
raise permissions.PermissionDenied("You are not authorized to send a message to this ticket.")
serializer.save(sender=self.request.user)
class UpdateTicketStatusView(APIView):
permission_classes = [permissions.IsAdminUser]
def post(self, request, pk):
try:
ticket = Ticket.objects.get(pk=pk)
except Ticket.DoesNotExist:
return Response({"error": "Ticket not found"}, status=404)
new_status = request.data.get('status')
if new_status not in ['open', 'in_progress', 'resolved', 'closed']:
return Response({"error": "Invalid status"}, status=400)
ticket.status = new_status
ticket.save()
return Response({"message": "Ticket status updated successfully"})