Files
ibapp-backend/core/apps/projects/views/project.py
behruz-dev 2309dbabaf fi
2025-08-05 16:05:08 +05:00

110 lines
4.0 KiB
Python

from django.shortcuts import get_object_or_404
from rest_framework import generics, status, views
from rest_framework.response import Response
from core.apps.projects.models.project import Project, ProjectFolder
from core.apps.projects.serializers import project as serializers
from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.shared.paginations.custom import CustomPageNumberPagination
class ProjectListApiView(generics.ListAPIView):
serializer_class = serializers.ProjectListSerializer
queryset = Project.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project']
pagination_class = CustomPageNumberPagination
def get_queryset(self):
return Project.objects.exclude(folder__isnull=False)
class ProjectDetailApiView(generics.RetrieveAPIView):
serializer_class = serializers.ProjectDetailSerialzier
queryset = Project.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project']
lookup_field = 'id'
class ProjectCreateApiView(generics.CreateAPIView):
serializer_class = serializers.ProjectCreateSerializer
queryset = Project.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project']
class ProjectUpdateApiView(generics.UpdateAPIView):
serializer_class = serializers.ProjectDetailSerialzier
queryset = Project.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project']
lookup_field = 'id'
class ProjectDeleteApiView(generics.DestroyAPIView):
permission_classes = [HasRolePermission]
lookup_field = 'id'
required_permissions = ['project']
queryset = Project.objects.all()
# Project Folder
class ProjectFolderCreateApiView(generics.CreateAPIView):
serializer_class = serializers.ProjectFolderCreateSerializer
queryset = ProjectFolder.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project_folder']
class ProjectFolderListApiView(generics.ListAPIView):
serializer_class = serializers.ProjectFolderListSerializer
queryset = ProjectFolder.objects.prefetch_related('projects')
permission_classes = [HasRolePermission]
required_permissions = ['project_folder']
pagination_class = CustomPageNumberPagination
class ProjectFolderCreateProjectApiView(generics.CreateAPIView):
serializer_class = serializers.ProjectFolderProjectCreateSerializer
queryset = Project.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project_folder']
class ProjectFolderUpdateApiView(generics.GenericAPIView):
serializer_class = serializers.ProjectFolderUpdateSerializer
queryset = ProjectFolder.objects.all()
permission_classes = [HasRolePermission]
required_permissions = ['project_folder']
def put(self, request, id):
folder = get_object_or_404(ProjectFolder, id=id)
serializer = self.serializer_class(data=request.data, instance=folder)
if serializer.is_valid():
serializer.save()
return Response({'success':True, 'message': "Folder updated!"}, status=200)
return Response({"success": False, 'message': serializer.errors}, status=400)
class ProjectFolderDetailApiView(generics.GenericAPIView):
serializer_class = serializers.ProjectFolderDetailSerializer
queryset = ProjectFolder.objects.select_related('projects')
permission_classes = [HasRolePermission]
required_permissions = ['project_folder']
def get(self, request, id):
folder = get_object_or_404(ProjectFolder, id=id)
serializer = self.serializer_class(folder)
return Response(serializer.data, status=200)
class ProjectFolderDeleteApiView(views.APIView):
permission_classes = [HasRolePermission]
required_permissions = ['project_folder']
def delete(self, request, id):
folder = get_object_or_404(ProjectFolder, id=id)
folder.delete()
return Response({"success": True, "message": 'deleted!'}, status=204)