add change_project_folder apis

This commit is contained in:
behruz-dev
2025-08-07 10:01:16 +05:00
parent 686afdc0cf
commit 94dbf577fa
4 changed files with 517 additions and 2 deletions

View File

@@ -137,4 +137,22 @@ class ProjectFolderDetailSerializer(serializers.ModelSerializer):
]
def get_projects_count(self, obj):
return obj.projects.count()
return obj.projects.count()
class ChangeProjectFolderSerializer(serializers.Serializer):
project_id = serializers.UUIDField()
project_folder_id = serializers.UUIDField()
def validate(self, data):
project = Project.objects.filter(id=data['project_id']).first()
if not project:
raise serializers.ValidationError("Project not found")
project_folder = ProjectFolder.objects.filter(id=data['project_folder_id']).first()
if not project_folder:
raise serializers.ValidationError("Project Folder not found")
if project.folder == project_folder:
raise serializers.ValidationError("the project folder is attached for this project")
data['project'] = project
data['project_folder'] = project_folder
return data

View File

@@ -11,6 +11,7 @@ urlpatterns = [
path('create/', project_views.ProjectCreateApiView.as_view()),
path('<uuid:id>/update/', project_views.ProjectUpdateApiView.as_view()),
path('<uuid:id>/delete/', project_views.ProjectDeleteApiView.as_view()),
path('change_folder/', project_views.ChangeProjectFolderApiView.as_view()),
]
)),
path('project_folder/', include(

View File

@@ -107,4 +107,24 @@ class ProjectFolderDeleteApiView(views.APIView):
def delete(self, request, id):
folder = get_object_or_404(ProjectFolder, id=id)
folder.delete()
return Response({"success": True, "message": 'deleted!'}, status=204)
return Response({"success": True, "message": 'deleted!'}, status=204)
class ChangeProjectFolderApiView(generics.GenericAPIView):
serializer_class = serializers.ChangeProjectFolderSerializer
queryset = Project.objects.all()
def post(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
project = serializer.validated_data.get('project')
folder = serializer.validated_data.get('project_folder')
project.folder = folder
project.save()
return Response(
{'success': True, 'message': 'Project Folder changed!'},
status=200
)
return Response(
{'success': False, 'message': serializer.errors}, status=400
)