from rest_framework.views import APIView from rest_framework import generics from rest_framework import serializers from rest_framework.response import Response from apps.customer.services import create_responsible_group, delete_responsible_group from apps.customer.selectors import retrieve_responsible_group, list_responsible_group from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace from rest_framework import status from utils import custom_permissions from apps.customer.models import ResponsibleGroup from rest_framework.permissions import IsAuthenticated class ResponsibleGroupRetrieveApi(APIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission, ) class OutputSerializer(serializers.ModelSerializer): class Meta: model = ResponsibleGroup fields = '__all__' def get(self, request, responsible_group_id: int): user_workspace_uuid = get_user_workspace_uuid(request) responsible_group_obj = retrieve_responsible_group(responsible_group_id=responsible_group_id, workspace_uuid=user_workspace_uuid) output = self.OutputSerializer(responsible_group_obj) return Response(data=output.data, status=status.HTTP_200_OK) class ResponsibleGroupListApi(generics.ListAPIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission, ) class OutputSerializer(serializers.ModelSerializer): class Meta: model = ResponsibleGroup fields = '__all__' serializer_class = OutputSerializer def get_queryset(self): user_workspace_uuid = get_user_workspace_uuid(self.request) return list_responsible_group(workspace_uuid=user_workspace_uuid) class ResponsibleGroupCreateApi(APIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission,) class InputSerializer(serializers.Serializer): name = serializers.CharField(max_length=20) class OutputSerializer(serializers.Serializer): name = serializers.CharField(max_length=20) def post(self, request): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) group_name = serializer.validated_data.get user_workspace = get_user_workspace(request=request) responsible_group_obj = create_responsible_group(name=group_name, workspace=user_workspace) output = self.OutputSerializer(responsible_group_obj) return Response(data=output.data, status=status.HTTP_201_CREATED) class ResponsibleGroupDeleteApi(APIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission,) def delete(self, request, responsible_group_id: int): user_workspace_uuid = get_user_workspace_uuid(request) delete_responsible_group(responsible_group_id=responsible_group_id, workspace_uuid=user_workspace_uuid) return Response(status=status.HTTP_200_OK)