add new apis

This commit is contained in:
behruz-dev
2025-08-19 13:37:27 +05:00
parent 93d9526376
commit c19fc991f1
3 changed files with 39 additions and 3 deletions

View File

@@ -283,4 +283,18 @@ class ProjectDetailSerialzier(serializers.ModelSerializer):
return {
'id': obj.builder.id,
'name': obj.builder.name
}
}
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']

View File

@@ -54,5 +54,6 @@ urlpatterns = [
path('<uuid:id>/update/', estimate_product_views.EstimateProductUpdateApiView.as_view()),
path('<uuid:id>/delete/', estimate_product_views.EstimateProductDeleteApiView.as_view()),
]
))
)),
path('projects_and_folders/', project_views.ProjectAndFolderApiView.as_view()),
]

View File

@@ -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
)
)
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
)