From 93b60444eaf9a8e3b2ac916f9c80d1590c00e399 Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Mon, 19 Aug 2024 17:06:59 +0300 Subject: [PATCH] serializer test --- back/api/urls.py | 3 ++- back/tgbot/serializers.py | 20 +++++++++++++++++++- back/tgbot/views.py | 22 ++++++++++++++++++++-- front/components/sidebar.vue | 6 ++++++ front/pages/stat/index.vue | 3 +++ front/pages/table/[id].vue | 2 +- front/store/authors.ts | 2 +- front/store/images.ts | 4 ++-- 8 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 front/pages/stat/index.vue diff --git a/back/api/urls.py b/back/api/urls.py index f4a5030..189b4ea 100644 --- a/back/api/urls.py +++ b/back/api/urls.py @@ -32,7 +32,8 @@ router.register(r'api/tmc/ter', tmc_views.TerritoryViewSet) router.register(r'api/tmc/terdeep', tmc_views.TerritoryItemViewSet) router.register(r'api/tmc/items', tmc_views.CustomTableViewSet) router.register(r'api/tgbot', tgbot_views.TgItemViewSet) -router.register(r'api/tgbot/items', tgbot_views.TmcFieldViewset) +router.register(r'api/tgbot_items', tgbot_views.TmcFieldViewset) +router.register(r'api/stat', tgbot_views.TmcStatViewset, basename='stat') urlpatterns = [ path('', include(router.urls)), diff --git a/back/tgbot/serializers.py b/back/tgbot/serializers.py index 618b940..6fbf2a7 100644 --- a/back/tgbot/serializers.py +++ b/back/tgbot/serializers.py @@ -1,5 +1,7 @@ from rest_framework import serializers +from tmc.models import Territory +from tmc.serializers import TerritorySerializer from .models import TgItem, TmcField import logging @@ -12,7 +14,23 @@ class TgItemSerializer(serializers.ModelSerializer): fields = "__all__" depth = 3 + +class TgStatItemSerializer(serializers.Serializer): + # location = serializers.CharField() + location = serializers.SerializerMethodField() + inv_count = serializers.IntegerField() + + def get_location(self, obj): + queryset = Territory.objects.get(id=obj.get('location__parent')) + serializer = TerritorySerializer(queryset) + + return serializer.data + + class Meta: + depth = 2 + + class TmcFieldSerializer(serializers.ModelSerializer): class Meta: model = TmcField - fields = "__all__" \ No newline at end of file + fields = "__all__" diff --git a/back/tgbot/views.py b/back/tgbot/views.py index deb8e6d..bb079c0 100644 --- a/back/tgbot/views.py +++ b/back/tgbot/views.py @@ -12,11 +12,13 @@ from rest_framework.response import Response from rest_framework.decorators import action from django_filters.rest_framework import DjangoFilterBackend +from django.db.models import Count +from tmc.models import TerritoryItem, Territory from .tgbot import TgBot from .updater import tg_bot_updater_instance -from .models import TgItem, TmcField -from .serializers import TgItemSerializer, TmcFieldSerializer +from .models import TgItem, TmcElement, TmcField +from .serializers import TgItemSerializer, TmcFieldSerializer, TgStatItemSerializer import logging @@ -119,3 +121,19 @@ class TmcFieldViewset(viewsets.ModelViewSet): response = HttpResponse(image, content_type="image/jpeg") response["Content-Disposition"] = 'inline; filename="image.jpeg"' return response + + +class TmcStatViewset(viewsets.ViewSet): + queryset = TgItem.objects.all().order_by("-created_at") + http_method_names = ["get"] + + def list(self, request): + queryset = ( + TgItem.objects.all() + .values("location__parent") + .annotate( + inv_count=Count("location__parent"), + ) + ) + serializer = TgStatItemSerializer(queryset, many=True) + return Response(serializer.data) diff --git a/front/components/sidebar.vue b/front/components/sidebar.vue index 2ef778d..97497ef 100644 --- a/front/components/sidebar.vue +++ b/front/components/sidebar.vue @@ -12,6 +12,12 @@ const links = [ icon: 'i-heroicons-pencil', to: '/table' } + , + { + label: 'Статистика', + icon: 'i-heroicons-funnel', + to: '/stat' + } ]