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()
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()
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>/delete/', folder_views.FolderDeleteApiView.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('create/', folder_views.SubFolderCreateApiView.as_view()),
@@ -36,6 +37,7 @@ urlpatterns = [
path('<uuid:id>/delete/', folder_views.SubFolderDeleteApiView.as_view()),
path('<uuid:id>/update/', folder_views.SubFolderUpdateApiView.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 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)
class SubFolderDetailApiView(generics.RetrieveAPIView):
serializer_class = serializers.SubFolderDetailSerializer
queryset = SubFolder.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['product', 'product_folder']
lookup_field = 'id'