add ticketing app and endpoints
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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"})
|
||||
Reference in New Issue
Block a user