diff --git a/backend/ticket/migrations/0015_remove_ticket_attachments_remove_ticket_content.py b/backend/ticket/migrations/0015_remove_ticket_attachments_remove_ticket_content.py new file mode 100644 index 0000000..f5de4af --- /dev/null +++ b/backend/ticket/migrations/0015_remove_ticket_attachments_remove_ticket_content.py @@ -0,0 +1,21 @@ +# Generated by Django 5.1.2 on 2025-02-26 17:42 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ticket', '0014_attachment_uploaded_by'), + ] + + operations = [ + migrations.RemoveField( + model_name='ticket', + name='attachments', + ), + migrations.RemoveField( + model_name='ticket', + name='content', + ), + ] diff --git a/backend/ticket/models.py b/backend/ticket/models.py index 8ab3b90..6a40c05 100644 --- a/backend/ticket/models.py +++ b/backend/ticket/models.py @@ -37,7 +37,6 @@ class Ticket(models.Model): ('other', 'سایر'), ] subject = models.CharField(max_length=255, verbose_name='موضوع') - content = models.TextField(verbose_name='جزيیات تیکت') ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES) customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر') admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین') @@ -45,7 +44,6 @@ class Ticket(models.Model): created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در') updated_at = jmodels.jDateTimeField(auto_now=True, verbose_name='اپدیت شده در') order = models.ForeignKey(OrderModel ,blank=True, null=True, on_delete=models.SET_NULL) - attachments = models.ManyToManyField(Attachment, related_name='tickets', blank=True) def __str__(self): return self.subject diff --git a/backend/ticket/serializers.py b/backend/ticket/serializers.py index bd7611f..ba2cc9c 100644 --- a/backend/ticket/serializers.py +++ b/backend/ticket/serializers.py @@ -3,40 +3,55 @@ from .models import Ticket, Message, Attachment from django.utils.timezone import localtime from account.serializers import ProfileSerializer - - -class MessageSerializer(serializers.ModelSerializer): - class Meta: - model = Message - fields = '__all__' - -class TicketSerializer(serializers.ModelSerializer): - messages = MessageSerializer(many=True, read_only=True) - admin = ProfileSerializer(read_only=True) - class Meta: - model = Ticket - exclude = ('customer', ) - read_only_fields = ('status', 'admin', ) - - -class TicketListSerializer(serializers.ModelSerializer): - class Meta: - model = Ticket - exclude = ('customer', 'admin', 'order', 'content') - read_only_fields = ('status',) - - class AttachmentSerializer(serializers.ModelSerializer): file = serializers.FileField(write_only=True) link = serializers.SerializerMethodField() class Meta: model = Attachment - fields = ['id', 'name', 'file','link' , 'created_at', 'size'] + fields = ['id', 'name', 'file', 'link' , 'created_at', 'size'] read_only_fields = ('size', 'name', ) def get_link(self, obj): request = self.context.get('request') if request is not None: return request.build_absolute_uri(obj.file.url) - return obj.file.url \ No newline at end of file + return obj.file.url + +class MessageSerializer(serializers.ModelSerializer): + class Meta: + model = Message + exclude = ('sender', ) + extra_kwargs = {'ticket': {'write_only': True}} + +class MessageForTicketSerializer(serializers.ModelSerializer): + class Meta: + model = Message + exclude = ('sender', 'ticket') +class TicketSerializer(serializers.ModelSerializer): + messages = MessageSerializer(many=True, read_only=True) + message = MessageForTicketSerializer(write_only=True) + class Meta: + model = Ticket + exclude = ('customer', 'admin') + read_only_fields = ('status',) + + def create(self, validated_data): + message = validated_data.pop('message', None) + ticket = super().create(validated_data) + print(f'fck this shit{ticket.pk}') + message['ticket'] = ticket.pk + message_obj = MessageSerializer(data=message) + if message_obj.is_valid(): + message_obj.save(sender=ticket.customer) + return ticket + else: + raise Exception('bullshit data for message') + +class TicketListSerializer(serializers.ModelSerializer): + class Meta: + model = Ticket + exclude = ('customer', 'admin', ) + read_only_fields = ('status',) + + diff --git a/backend/ticket/views.py b/backend/ticket/views.py index 292b4f7..556d6b8 100644 --- a/backend/ticket/views.py +++ b/backend/ticket/views.py @@ -40,16 +40,30 @@ class AttachmentUploadView(APIView): -class TicketCreateView(generics.CreateAPIView): - queryset = Ticket.objects.all() +# class TicketCreateView(generics.CreateAPIView): +# queryset = Ticket.objects.all() +# serializer_class = TicketSerializer +# permission_classes = [permissions.IsAuthenticated] + +# def perform_create(self, serializer): +# message = serializer.validated_data.get('message') +# ticket = serializer.validated_data.get('ticket') +# serializer.save(customer=self.request.user) + + +class TicketCreateView(APIView): serializer_class = TicketSerializer permission_classes = [permissions.IsAuthenticated] - - def perform_create(self, serializer): - serializer.save(customer=self.request.user) - - - + def post(self, request): + new_ticket_ser = self.serializer_class(data=request.data) + message = request.data.get('message', None) + print(message) + if new_ticket_ser.is_valid(): + new_ticket_ser.save(customer=request.user) + return Response(new_ticket_ser.data, status=status.HTTP_201_CREATED) + else: + print(new_ticket_ser.error_messages) + return Response(new_ticket_ser.errors) class TicketListView(APIView): serializer_class = TicketListSerializer permission_classes = [permissions.IsAuthenticated]