From 287856f8754073f06e38df57098d22296246f1e0 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 10 Sep 2025 16:27:00 +0500 Subject: [PATCH] add: add folder detail api --- core/apps/products/serializers/folder.py | 18 +++++++++++- core/apps/products/urls.py | 2 ++ core/apps/products/views/folder.py | 36 ++++++++++++++++-------- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/core/apps/products/serializers/folder.py b/core/apps/products/serializers/folder.py index 1bd93e3..ee63322 100644 --- a/core/apps/products/serializers/folder.py +++ b/core/apps/products/serializers/folder.py @@ -26,6 +26,14 @@ class FolderSerializer(serializers.ModelSerializer): return obj.products.count() +class FolderDetailSerializer(serializers.ModelSerializer): + class Meta: + model = Folder + fields = [ + 'id', 'name' + ] + + class SubFolderSerializer(serializers.ModelSerializer): product_count = serializers.SerializerMethodField(method_name='get_product_count') @@ -48,4 +56,12 @@ class SubFolderSerializer(serializers.ModelSerializer): return instance def get_product_count(self, obj): - return obj.products.count() \ No newline at end of file + return obj.products.count() + + +class SubFolderDetailSerializer(serializers.ModelSerializer): + class Meta: + model = SubFolder + fields = [ + 'id', 'name' + ] \ No newline at end of file diff --git a/core/apps/products/urls.py b/core/apps/products/urls.py index f644acb..a3e2ef7 100644 --- a/core/apps/products/urls.py +++ b/core/apps/products/urls.py @@ -29,6 +29,7 @@ urlpatterns = [ path('/update/', folder_views.FolderUdateApiView.as_view()), path('/delete/', folder_views.FolderDeleteApiView.as_view()), path('/products/', folder_views.FolderProductListApiView.as_view()), + path('/', folder_views.FolderDetailApiView.as_view()), path('sub_folder/', include( [ path('create/', folder_views.SubFolderCreateApiView.as_view()), @@ -36,6 +37,7 @@ urlpatterns = [ path('/delete/', folder_views.SubFolderDeleteApiView.as_view()), path('/update/', folder_views.SubFolderUpdateApiView.as_view()), path("/products/", folder_views.SubFolderProductListApiView.as_view()), + path('/', folder_views.SubFolderDetailApiView.as_view()), ] )), ] diff --git a/core/apps/products/views/folder.py b/core/apps/products/views/folder.py index 95f38d2..8d28e7e 100644 --- a/core/apps/products/views/folder.py +++ b/core/apps/products/views/folder.py @@ -3,7 +3,7 @@ from django.shortcuts import get_object_or_404 from rest_framework.response import Response from rest_framework import generics, views, filters -from core.apps.products.serializers.folder import FolderSerializer, SubFolderSerializer +from core.apps.products.serializers import folder as serializers from core.apps.products.models import Folder, SubFolder, Product from core.apps.products.serializers.product import ProductListSerializer from core.apps.accounts.permissions.permissions import HasRolePermission @@ -11,14 +11,22 @@ from core.apps.shared.paginations.custom import CustomPageNumberPagination class FolderCreateApiView(generics.CreateAPIView): - serializer_class = FolderSerializer + serializer_class = serializers.FolderSerializer queryset = Folder.objects.all() permission_classes = [HasRolePermission] required_permissions = ['product_folder'] +class FolderDetailApiView(generics.RetrieveAPIView): + serializer_class = serializers.FolderDetailSerializer + queryset = Folder.objects.all() + permission_classes = [HasRolePermission] + required_permissions = ['product_folder'] + lookup_field = 'id' + + class FolderListApiView(generics.ListAPIView): - serializer_class = FolderSerializer + serializer_class = serializers.FolderSerializer queryset = Folder.objects.all() permission_classes = [HasRolePermission] required_permissions = ['product_folder'] @@ -26,16 +34,15 @@ class FolderListApiView(generics.ListAPIView): class FolderUdateApiView(generics.UpdateAPIView): - serializer_class = FolderSerializer + serializer_class = serializers.FolderSerializer queryset = Folder.objects.all() permission_classes = [HasRolePermission] required_permissions = ['product_folder'] lookup_field = 'id' - class FolderDeleteApiView(generics.DestroyAPIView): - serializer_class = FolderSerializer + serializer_class = serializers.FolderSerializer queryset = Folder.objects.all() permission_classes = [HasRolePermission] required_permissions = ['product_folder'] @@ -62,7 +69,7 @@ class FolderProductListApiView(generics.GenericAPIView): class SubFolderCreateApiView(generics.CreateAPIView): - serializer_class = SubFolderSerializer + serializer_class = serializers.SubFolderSerializer queryset = SubFolder.objects.all() permission_classes = [HasRolePermission] required_permissions = ['product_folder'] @@ -76,12 +83,12 @@ class SubFolderListByFolderIdApiView(views.APIView): def get(self, request, folder_id): folder = get_object_or_404(Folder, id=folder_id) sub_folders = SubFolder.objects.filter(folder=folder) - serializer = SubFolderSerializer(sub_folders, many=True) + serializer = serializers.SubFolderSerializer(sub_folders, many=True) return Response(serializer.data, status=200) class SubFolderUpdateApiView(generics.UpdateAPIView): - serializer_class = SubFolderSerializer + serializer_class = serializers.SubFolderSerializer queryset = SubFolder.objects.all() lookup_field = 'id' permission_classes = [HasRolePermission] @@ -89,7 +96,7 @@ class SubFolderUpdateApiView(generics.UpdateAPIView): class SubFolderDeleteApiView(generics.DestroyAPIView): - serializer_class = SubFolderSerializer + serializer_class = serializers.SubFolderSerializer queryset = SubFolder.objects.all() lookup_field = 'id' permission_classes = [HasRolePermission] @@ -109,4 +116,11 @@ class SubFolderProductListApiView(generics.GenericAPIView): data = self.paginate_queryset(products) serializer = self.serializer_class(data, many=True) return self.get_paginated_response(serializer.data) - \ No newline at end of file + + +class SubFolderDetailApiView(generics.RetrieveAPIView): + serializer_class = serializers.SubFolderDetailSerializer + queryset = SubFolder.objects.all() + permission_classes = [HasRolePermission] + required_permissions = ['product', 'product_folder'] + lookup_field = 'id' \ No newline at end of file