add folder product list apis

This commit is contained in:
behruz-dev
2025-08-16 14:58:42 +05:00
parent 04bcd42098
commit c68fc85e16
4 changed files with 40 additions and 4 deletions

View File

@@ -25,12 +25,14 @@ urlpatterns = [
path('list/', folder_views.FolderListApiView.as_view()), path('list/', folder_views.FolderListApiView.as_view()),
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('sub_folder/', include( path('sub_folder/', include(
[ [
path('create/', folder_views.SubFolderCreateApiView.as_view()), path('create/', folder_views.SubFolderCreateApiView.as_view()),
path('<uuid:folder_id>/list/', folder_views.SubFolderListByFolderIdApiView.as_view()), path('<uuid:folder_id>/list/', folder_views.SubFolderListByFolderIdApiView.as_view()),
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()),
] ]
)), )),
] ]

View File

@@ -4,8 +4,10 @@ from rest_framework.response import Response
from rest_framework import generics, views from rest_framework import generics, views
from core.apps.products.serializers.folder import FolderSerializer, SubFolderSerializer from core.apps.products.serializers.folder import FolderSerializer, SubFolderSerializer
from core.apps.products.models.folder import Folder, SubFolder 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 from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.shared.paginations.custom import CustomPageNumberPagination
class FolderCreateApiView(generics.CreateAPIView): class FolderCreateApiView(generics.CreateAPIView):
@@ -40,6 +42,23 @@ class FolderDeleteApiView(generics.DestroyAPIView):
lookup_field = 'id' lookup_field = 'id'
class FolderProductListApiView(generics.GenericAPIView):
pagination_class = CustomPageNumberPagination
permission_classes = [HasRolePermission]
required_permissions = ['product', 'product_folder']
queryset = Product.objects.all()
serializer_class = ProductListSerializer
def get(self, request, folder_id):
folder = get_object_or_404(Folder, id=folder_id)
products = Product.objects.filter(folder=folder)
data = self.paginate_queryset(products)
serializer = self.serializer_class(data, many=True)
return self.get_paginated_response(serializer.data)
class SubFolderCreateApiView(generics.CreateAPIView): class SubFolderCreateApiView(generics.CreateAPIView):
serializer_class = SubFolderSerializer serializer_class = SubFolderSerializer
queryset = SubFolder.objects.all() queryset = SubFolder.objects.all()
@@ -74,3 +93,18 @@ class SubFolderDeleteApiView(generics.DestroyAPIView):
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = ['product_folder'] required_permissions = ['product_folder']
class SubFolderProductListApiView(generics.GenericAPIView):
pagination_class = CustomPageNumberPagination
permission_classes = [HasRolePermission]
required_permissions = ['product', 'product_folder']
queryset = Product.objects.all()
serializer_class = ProductListSerializer
def get(self, request, sub_folder_id):
sub_folder = get_object_or_404(SubFolder, id=sub_folder_id)
products = Product.objects.filter(sub_folder=sub_folder)
data = self.paginate_queryset(products)
serializer = self.serializer_class(data, many=True)
return self.get_paginated_response(serializer.data)

View File

@@ -3,7 +3,7 @@ from django.shortcuts import get_object_or_404
from rest_framework import generics, views from rest_framework import generics, views
from rest_framework.response import Response from rest_framework.response import Response
from core.apps.products.models.product import Product from core.apps.products.models import Product
from core.apps.products.serializers import product as serializers from core.apps.products.serializers import product as serializers
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.shared.paginations.custom import CustomPageNumberPagination from core.apps.shared.paginations.custom import CustomPageNumberPagination