diff --git a/core/apps/projects/serializers/project.py b/core/apps/projects/serializers/project.py index 0ba2197..8c90d1d 100644 --- a/core/apps/projects/serializers/project.py +++ b/core/apps/projects/serializers/project.py @@ -283,4 +283,18 @@ class ProjectDetailSerialzier(serializers.ModelSerializer): return { 'id': obj.builder.id, 'name': obj.builder.name - } \ No newline at end of file + } + + +class ProjectsSerializer(serializers.ModelSerializer): + class Meta: + model = Project + fields = ['id', 'name'] + + +class ProjectFoldersSerializer(serializers.ModelSerializer): + projects = ProjectsSerializer(many=True) + + class Meta: + model = ProjectFolder + fields = ['id', 'name', 'projects'] \ No newline at end of file diff --git a/core/apps/projects/urls.py b/core/apps/projects/urls.py index 0f65e9d..35c4cfa 100644 --- a/core/apps/projects/urls.py +++ b/core/apps/projects/urls.py @@ -54,5 +54,6 @@ urlpatterns = [ path('/update/', estimate_product_views.EstimateProductUpdateApiView.as_view()), path('/delete/', estimate_product_views.EstimateProductDeleteApiView.as_view()), ] - )) + )), + path('projects_and_folders/', project_views.ProjectAndFolderApiView.as_view()), ] \ No newline at end of file diff --git a/core/apps/projects/views/project.py b/core/apps/projects/views/project.py index 471f62a..63a580e 100644 --- a/core/apps/projects/views/project.py +++ b/core/apps/projects/views/project.py @@ -138,6 +138,7 @@ class ProjectFolderDeleteApiView(views.APIView): class ChangeProjectFolderApiView(generics.GenericAPIView): serializer_class = serializers.ChangeProjectFolderSerializer queryset = Project.objects.all() + required_permissions = ['project_folder'] def post(self, request): serializer = self.serializer_class(data=request.data) @@ -152,4 +153,24 @@ class ChangeProjectFolderApiView(generics.GenericAPIView): ) return Response( {'success': False, 'message': serializer.errors}, status=400 - ) \ No newline at end of file + ) + + +class ProjectAndFolderApiView(views.APIView): + permission_classes = [HasRolePermission] + required_permissions = ['project', 'project_folder'] + + def get(self, request): + folders = ProjectFolder.objects.prefetch_related('projects').only( + 'id','name', 'projects__id', 'projects__id' + ).exclude(folder__isnull=True) + projects = Project.objects.only('id', 'name').exclude(folder__isnull=False) + projects_serializer = serializers.ProjectsSerializer(projects, many=True) + folders_serializer = serializers.ProjectFoldersSerializer(folders, many=True) + return Response( + { + 'project_folders': folders_serializer.data, + 'projects': projects_serializer.data, + }, + status=200 + )