diff --git a/logs_collector/collector/serializers.py b/logs_collector/collector/serializers.py new file mode 100644 index 0000000..59f5e81 --- /dev/null +++ b/logs_collector/collector/serializers.py @@ -0,0 +1,24 @@ +from rest_framework import serializers + +from .models import Archive, Ticket + + +class ArchiveUploadSerializer(serializers.ModelSerializer): + ticket_number = serializers.ReadOnlyField(source='ticket.number') + + class Meta: + model = Archive + fields = ['file', 'ticket', 'ticket_number'] + + def to_internal_value(self, data): + try: + ticket = Ticket.objects.get(number=data['ticket']) + data['ticket'] = ticket.id + return super().to_internal_value(data) + except Exception: + return super().to_internal_value(data) + + def to_representation(self, instance): + data = super().to_representation(instance) + data['ticket'] = data.pop('ticket_number') + return data diff --git a/logs_collector/collector/urls.py b/logs_collector/collector/urls.py index bd0ab52..c4bfbdf 100644 --- a/logs_collector/collector/urls.py +++ b/logs_collector/collector/urls.py @@ -1,8 +1,14 @@ -from django.urls import path +from django.urls import path, include + +from rest_framework import routers from . import views app_name = 'collector' + +router = routers.DefaultRouter() +router.register(r'archives', views.ArchiveUploadViewSet) + urlpatterns = [ # █░█░█ █▀▀ █▄▄ @@ -64,4 +70,12 @@ urlpatterns = [ views.DeleteTicketHandler.as_view(), name='ajax_delete_ticket' ), + + + # ▄▀█ █▀█ █ + # █▀█ █▀▀ █ + # -- -- -- + + # CREATE: + path('api/v1/', include(router.urls)) ] diff --git a/logs_collector/collector/views.py b/logs_collector/collector/views.py index 7f00797..472d7dd 100644 --- a/logs_collector/collector/views.py +++ b/logs_collector/collector/views.py @@ -7,12 +7,17 @@ from django.urls import reverse_lazy from django.db.models import Q from rest_framework import status -# from rest_framework.response import Response +from rest_framework.parsers import FormParser, MultiPartParser + +from rest_framework import mixins +from rest_framework.viewsets import GenericViewSet from .models import Archive, Ticket from .forms import TicketForm from .utils import PageTitleViewMixin, is_ajax +from .serializers import ArchiveUploadSerializer + class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View): model = Archive @@ -54,6 +59,7 @@ class UpdateTicket(LoginRequiredMixin, PageTitleViewMixin, generic.UpdateView): return f'{self.title} - {self.kwargs.get("ticket", "update")}' def form_valid(self, form): + print(self.request.user) form.instance.user = self.request.user return super().form_valid(form) @@ -164,3 +170,13 @@ class DeleteTicketHandler(SingleObjectMixin, generic.View): {'error': 'header XMLHttpRequest is required'}, status=status.HTTP_406_NOT_ACCEPTABLE ) + + +class ArchiveUploadViewSet(mixins.CreateModelMixin, GenericViewSet): + queryset = Archive.objects.order_by('-time_create') + serializer_class = ArchiveUploadSerializer + parser_classes = (MultiPartParser, FormParser) + # permission_classes = [permissions.IsAuthenticatedOrReadOnly] + + def perform_create(self, serializer): + serializer.save(user=self.request.user)