diff --git a/logs_collector/collector/static/collector/js/jq.ticket.detail.js b/logs_collector/collector/static/collector/js/jq.ticket.detail.js index 88fea6d..10575fd 100644 --- a/logs_collector/collector/static/collector/js/jq.ticket.detail.js +++ b/logs_collector/collector/static/collector/js/jq.ticket.detail.js @@ -12,7 +12,7 @@ $(function () { const archiveListElement = $(this).attr("data-jq-archive-target"); const delUrl = $(this).attr("href"); $.ajax({ - type: "delete", + type: "DELETE", url: delUrl, headers: { "X-CSRFToken":CSRF, @@ -21,12 +21,12 @@ $(function () { // beforeSend: function(xhr) { // xhr.setRequestHeader("X-CSRFToken", csrf); // }, - success: function (response) { - console.log(response.status); + success: function (data, textStatus, jqXHR) { + console.log(jqXHR.status); $(archiveListElement).hide(1500); }, - error: function (response) { - console.log(response.status); + error: function (data, textStatus, jqXHR) { + console.log(jqXHR.status); } }); }); @@ -37,16 +37,13 @@ $(function () { let resolved = false; let ticketStateUrl = $(this).attr("ticket-state-url") if ($(this).attr("ticket-state-switch") === "1") { - console.log('Find it!!!') - resolved = true; $(this).attr("ticket-state-switch", "0"); // disable } else { - resolved = false; + resolved = true; $(this).attr("ticket-state-switch", "1"); // enable } - console.log(resolved) $.ajax({ - type: "POST", + type: "PATCH", url: ticketStateUrl, headers: { "X-CSRFToken":CSRF, @@ -57,11 +54,12 @@ $(function () { data: JSON.stringify({ resolved: resolved, }), - success: function (response) { - console.log(response.resolved) + success: function (data, textStatus, jqXHR) { + console.log(jqXHR.status) }, - error: function (response) { - console.log(response.resolved) + error: function (data, textStatus, jqXHR) { + console.log(data) + console.log(jqXHR.status) } }); }); @@ -80,16 +78,16 @@ $(function () { 'X-CSRFToken':CSRF, 'Content-Type':'application/json' }, - success: function (response) { - console.log(response.status); + success: function (data, textStatus, jqXHR) { + console.log(jqXHR.status); if (delDiv.length) { delDiv.hide(1500); } else { window.location.href = redirectUrl; } }, - error: function (response) { - console.log(response.status); + error: function (data, textStatus, jqXHR) { + console.log(jqXHR.status); } }); }); diff --git a/logs_collector/collector/templates/collector/includes/modal_archive.html b/logs_collector/collector/templates/collector/includes/modal_archive.html index 407b816..c143909 100644 --- a/logs_collector/collector/templates/collector/includes/modal_archive.html +++ b/logs_collector/collector/templates/collector/includes/modal_archive.html @@ -30,7 +30,7 @@ >Cancel Admin + > Admin {% endif %} +
  • + Swagger +
  • diff --git a/logs_collector/collector/templates/collector/includes/ticket_info.html b/logs_collector/collector/templates/collector/includes/ticket_info.html index 27d4581..734b29a 100644 --- a/logs_collector/collector/templates/collector/includes/ticket_info.html +++ b/logs_collector/collector/templates/collector/includes/ticket_info.html @@ -9,7 +9,7 @@ type="checkbox" role="switch" name="ticket-state" - ticket-state-url="{% url 'collector:ajax_update_state_ticket' ticket.platform.name ticket.number %}" + ticket-state-url="{% url 'collector:ticket-detail' ticket.number %}" {% if ticket.resolved %} ticket-state-switch="1" {% endif %} {% if ticket.resolved %} checked {% endif %}> diff --git a/logs_collector/collector/urls.py b/logs_collector/collector/urls.py index e4f8aae..16ce312 100644 --- a/logs_collector/collector/urls.py +++ b/logs_collector/collector/urls.py @@ -6,17 +6,11 @@ from . import views app_name = 'collector' -router = routers.DefaultRouter() -router.register(r'archives', views.ArchiveViewSet) -router.register(r'platforms', views.PlatformViewSet) -router.register(r'tickets', views.TicketViewSet) +# █░█░█ █▀▀ █▄▄ +# ▀▄▀▄▀ ██▄ █▄█ +# -- -- -- -- -- urlpatterns = [ - - # █░█░█ █▀▀ █▄▄ - # ▀▄▀▄▀ ██▄ █▄█ - # -- -- -- -- -- - # CREATE: path( 'tickets/create/', @@ -55,28 +49,18 @@ urlpatterns = [ views.UpdateTicket.as_view(), name='update' ), +] - # ▄▀█ ░░█ ▄▀█ ▀▄▀ - # █▀█ █▄█ █▀█ █░█ - # -- -- -- -- -- +# ▄▀█ █▀█ █ +# █▀█ █▀▀ █ +# -- -- -- - # UPDATE: - path( - 'ajax/tickets/update///', - views.UpdateTicketStateHandler.as_view(), - name='ajax_update_state_ticket' - ), - # DELETE: - path( - 'ajax/tickets/delete//', - views.DeleteTicketHandler.as_view(), - name='ajax_delete_ticket' - ), - - # ▄▀█ █▀█ █ - # █▀█ █▀▀ █ - # -- -- -- +router = routers.DefaultRouter() +router.register(r'archives', views.ArchiveViewSet) +router.register(r'platforms', views.PlatformViewSet) +router.register(r'tickets', views.TicketViewSet) +urlpatterns += [ # CRUD: path('api/v1/', include(router.urls)), ] diff --git a/logs_collector/collector/views.py b/logs_collector/collector/views.py index 2f8523b..8de0156 100644 --- a/logs_collector/collector/views.py +++ b/logs_collector/collector/views.py @@ -1,10 +1,8 @@ -import json from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.contrib.auth.mixins import LoginRequiredMixin -from django.http import FileResponse, JsonResponse +from django.http import FileResponse from django.views import generic from django.views.generic.detail import SingleObjectMixin -from django.urls import reverse_lazy from django.db.models import Q from rest_framework import status @@ -20,7 +18,7 @@ from django_filters.rest_framework import DjangoFilterBackend from .models import Archive, Ticket, Platform from .forms import TicketForm from .filters import ArchiveFilter, TicketFilter -from .utils import PageTitleViewMixin, is_ajax +from .utils import PageTitleViewMixin from .permissions import IsGuestUpload from .serializers import ( @@ -40,12 +38,6 @@ class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View): self.object = self.get_object() return FileResponse(self.object.file) - def delete(self, request, path): - if is_ajax(request): - self.object = self.get_object() - self.object.delete() - return JsonResponse({'file': path}, status=status.HTTP_200_OK) - class CreateTicket(LoginRequiredMixin, PageTitleViewMixin, generic.CreateView): model = Ticket @@ -71,7 +63,6 @@ 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) @@ -95,13 +86,17 @@ class ListAllTickets(PageTitleViewMixin, generic.ListView): queryset = self.model.objects.filter( Q(number__in=query_list) | Q(number__icontains=query_list[0]) ) - self.paginate_by = 100 # fake disable pagination) + self.paginate_by = 100 # ? fake disable pagination) return queryset return super().get_queryset() -class ListPlatformTickets(PageTitleViewMixin, generic.ListView): +class ListPlatformTickets( + LoginRequiredMixin, + PageTitleViewMixin, + generic.ListView + ): model = Ticket template_name = 'collector/tickets.html' context_object_name = 'tickets' @@ -117,7 +112,7 @@ class ListPlatformTickets(PageTitleViewMixin, generic.ListView): ) -class DetailTicket(PageTitleViewMixin, generic.DetailView): +class DetailTicket(LoginRequiredMixin, PageTitleViewMixin, generic.DetailView): model = Ticket template_name = 'collector/ticket.html' context_object_name = 'ticket' @@ -128,62 +123,6 @@ class DetailTicket(PageTitleViewMixin, generic.DetailView): return f'{self.title} - {self.kwargs.get("ticket", "show")}' -class DeleteTicket(PageTitleViewMixin, generic.DeleteView): - model = Ticket - template_name = 'collector/ticket_delete.html' - context_object_name = 'ticket' - slug_field = 'number' - slug_url_kwarg = 'ticket' - success_url = reverse_lazy('tickets') - - -class UpdateTicketStateHandler(SingleObjectMixin, generic.View): - model = Ticket - slug_field = 'number' - slug_url_kwarg = 'ticket' - - def post(self, request, **kwargs): - if is_ajax(request): - self.object = self.get_object() - if request.body: - data = json.loads(request.body) - resolved_field = data.get('resolved') - if isinstance(resolved_field, bool): - self.object.resolved = not resolved_field - self.object.save() - return JsonResponse( - {'resolved': not resolved_field}, - status=status.HTTP_201_CREATED - ) - return JsonResponse( - {'resolved': 'must be a boolean'}, - status=status.HTTP_400_BAD_REQUEST - ) - return JsonResponse( - {'error': 'header XMLHttpRequest is required'}, - status=status.HTTP_406_NOT_ACCEPTABLE - ) - - -class DeleteTicketHandler(SingleObjectMixin, generic.View): - model = Ticket - slug_field = 'number' - slug_url_kwarg = 'ticket' - - def delete(self, request, ticket): - if is_ajax(request): - self.object = self.get_object() - self.object.delete() - return JsonResponse( - {'status': status.HTTP_200_OK}, - status=status.HTTP_200_OK - ) - return JsonResponse( - {'error': 'header XMLHttpRequest is required'}, - status=status.HTTP_406_NOT_ACCEPTABLE - ) - - class ArchiveViewSet(viewsets.ModelViewSet): queryset = Archive.objects.order_by('-time_create') serializer_class = ArchiveSerializer @@ -210,7 +149,7 @@ class ArchiveViewSet(viewsets.ModelViewSet): ) bound_ticket.attempts -= 1 bound_ticket.save() - # ? mixin bound ticket to request.data from user + # ? mixin bound ticket number to request.data from user request.data['ticket'] = bound_ticket.number # ? change serializer for guest user self.serializer_class = PublicArchiveUploadSerializer diff --git a/logs_collector/logs_collector/settings.py b/logs_collector/logs_collector/settings.py index d10fa07..4ce9933 100644 --- a/logs_collector/logs_collector/settings.py +++ b/logs_collector/logs_collector/settings.py @@ -173,12 +173,6 @@ SPECTACULAR_SETTINGS = { 'VERSION': '0.1.0', 'SERVE_INCLUDE_SCHEMA': True, 'SERVE_PUBLIC': False, - 'SERVERS': [ - { - 'url': 'http://localhost:8000/api/v1/', - 'description': 'main api endpoint' - }, - ], } # https://django-rest-framework-simplejwt.readthedocs.io/en/latest/