add: add folder detail api

This commit is contained in:
behruz-dev
2025-09-10 16:27:00 +05:00
parent 7cc8935a9b
commit 287856f875
3 changed files with 44 additions and 12 deletions

View File

@@ -26,6 +26,14 @@ class FolderSerializer(serializers.ModelSerializer):
return obj.products.count() return obj.products.count()
class FolderDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Folder
fields = [
'id', 'name'
]
class SubFolderSerializer(serializers.ModelSerializer): class SubFolderSerializer(serializers.ModelSerializer):
product_count = serializers.SerializerMethodField(method_name='get_product_count') product_count = serializers.SerializerMethodField(method_name='get_product_count')
@@ -48,4 +56,12 @@ class SubFolderSerializer(serializers.ModelSerializer):
return instance return instance
def get_product_count(self, obj): def get_product_count(self, obj):
return obj.products.count() return obj.products.count()
class SubFolderDetailSerializer(serializers.ModelSerializer):
class Meta:
model = SubFolder
fields = [
'id', 'name'
]

View File

@@ -29,6 +29,7 @@ urlpatterns = [
path('<uuid:id>/update/', folder_views.FolderUdateApiView.as_view()), path('<uuid:id>/update/', folder_views.FolderUdateApiView.as_view()),
path('<uuid:id>/delete/', folder_views.FolderDeleteApiView.as_view()), path('<uuid:id>/delete/', folder_views.FolderDeleteApiView.as_view()),
path('<uuid:folder_id>/products/', folder_views.FolderProductListApiView.as_view()), path('<uuid:folder_id>/products/', folder_views.FolderProductListApiView.as_view()),
path('<uuid:id>/', folder_views.FolderDetailApiView.as_view()),
path('sub_folder/', include( path('sub_folder/', include(
[ [
path('create/', folder_views.SubFolderCreateApiView.as_view()), path('create/', folder_views.SubFolderCreateApiView.as_view()),
@@ -36,6 +37,7 @@ urlpatterns = [
path('<uuid:id>/delete/', folder_views.SubFolderDeleteApiView.as_view()), path('<uuid:id>/delete/', folder_views.SubFolderDeleteApiView.as_view()),
path('<uuid:id>/update/', folder_views.SubFolderUpdateApiView.as_view()), path('<uuid:id>/update/', folder_views.SubFolderUpdateApiView.as_view()),
path("<uuid:sub_folder_id>/products/", folder_views.SubFolderProductListApiView.as_view()), path("<uuid:sub_folder_id>/products/", folder_views.SubFolderProductListApiView.as_view()),
path('<uuid:id>/', folder_views.SubFolderDetailApiView.as_view()),
] ]
)), )),
] ]

View File

@@ -3,7 +3,7 @@ from django.shortcuts import get_object_or_404
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import generics, views, filters 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.models import Folder, SubFolder, Product
from core.apps.products.serializers.product import ProductListSerializer from core.apps.products.serializers.product import ProductListSerializer
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
@@ -11,14 +11,22 @@ from core.apps.shared.paginations.custom import CustomPageNumberPagination
class FolderCreateApiView(generics.CreateAPIView): class FolderCreateApiView(generics.CreateAPIView):
serializer_class = FolderSerializer serializer_class = serializers.FolderSerializer
queryset = Folder.objects.all() queryset = Folder.objects.all()
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = ['product_folder'] 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): class FolderListApiView(generics.ListAPIView):
serializer_class = FolderSerializer serializer_class = serializers.FolderSerializer
queryset = Folder.objects.all() queryset = Folder.objects.all()
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = ['product_folder'] required_permissions = ['product_folder']
@@ -26,16 +34,15 @@ class FolderListApiView(generics.ListAPIView):
class FolderUdateApiView(generics.UpdateAPIView): class FolderUdateApiView(generics.UpdateAPIView):
serializer_class = FolderSerializer serializer_class = serializers.FolderSerializer
queryset = Folder.objects.all() queryset = Folder.objects.all()
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = ['product_folder'] required_permissions = ['product_folder']
lookup_field = 'id' lookup_field = 'id'
class FolderDeleteApiView(generics.DestroyAPIView): class FolderDeleteApiView(generics.DestroyAPIView):
serializer_class = FolderSerializer serializer_class = serializers.FolderSerializer
queryset = Folder.objects.all() queryset = Folder.objects.all()
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = ['product_folder'] required_permissions = ['product_folder']
@@ -62,7 +69,7 @@ class FolderProductListApiView(generics.GenericAPIView):
class SubFolderCreateApiView(generics.CreateAPIView): class SubFolderCreateApiView(generics.CreateAPIView):
serializer_class = SubFolderSerializer serializer_class = serializers.SubFolderSerializer
queryset = SubFolder.objects.all() queryset = SubFolder.objects.all()
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = ['product_folder'] required_permissions = ['product_folder']
@@ -76,12 +83,12 @@ class SubFolderListByFolderIdApiView(views.APIView):
def get(self, request, folder_id): def get(self, request, folder_id):
folder = get_object_or_404(Folder, id=folder_id) folder = get_object_or_404(Folder, id=folder_id)
sub_folders = SubFolder.objects.filter(folder=folder) 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) return Response(serializer.data, status=200)
class SubFolderUpdateApiView(generics.UpdateAPIView): class SubFolderUpdateApiView(generics.UpdateAPIView):
serializer_class = SubFolderSerializer serializer_class = serializers.SubFolderSerializer
queryset = SubFolder.objects.all() queryset = SubFolder.objects.all()
lookup_field = 'id' lookup_field = 'id'
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
@@ -89,7 +96,7 @@ class SubFolderUpdateApiView(generics.UpdateAPIView):
class SubFolderDeleteApiView(generics.DestroyAPIView): class SubFolderDeleteApiView(generics.DestroyAPIView):
serializer_class = SubFolderSerializer serializer_class = serializers.SubFolderSerializer
queryset = SubFolder.objects.all() queryset = SubFolder.objects.all()
lookup_field = 'id' lookup_field = 'id'
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
@@ -109,4 +116,11 @@ class SubFolderProductListApiView(generics.GenericAPIView):
data = self.paginate_queryset(products) data = self.paginate_queryset(products)
serializer = self.serializer_class(data, many=True) serializer = self.serializer_class(data, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
class SubFolderDetailApiView(generics.RetrieveAPIView):
serializer_class = serializers.SubFolderDetailSerializer
queryset = SubFolder.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['product', 'product_folder']
lookup_field = 'id'