222 lines
7.6 KiB
Python
222 lines
7.6 KiB
Python
from django.shortcuts import get_object_or_404
|
|
from drf_spectacular.utils import extend_schema, inline_serializer
|
|
|
|
from rest_framework import serializers, status
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from common import swagger_params
|
|
from common.models import APISettings, Profile, Tags
|
|
from common.serializer import (
|
|
APISettingsListSerializer,
|
|
APISettingsSerializer,
|
|
APISettingsSwaggerSerializer,
|
|
ProfileSerializer,
|
|
)
|
|
|
|
|
|
class DomainList(APIView):
|
|
model = APISettings
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
@extend_schema(
|
|
tags=["Settings"],
|
|
operation_id="api_settings_list",
|
|
parameters=swagger_params.organization_params,
|
|
responses={
|
|
200: inline_serializer(
|
|
name="DomainListResponse",
|
|
fields={
|
|
"error": serializers.BooleanField(),
|
|
"api_settings": APISettingsListSerializer(many=True),
|
|
"users": ProfileSerializer(many=True),
|
|
},
|
|
)
|
|
},
|
|
)
|
|
def get(self, request, *args, **kwargs):
|
|
api_settings = APISettings.objects.filter(org=request.profile.org)
|
|
users = Profile.objects.filter(
|
|
is_active=True, org=request.profile.org
|
|
).order_by("user__email")
|
|
return Response(
|
|
{
|
|
"error": False,
|
|
"api_settings": APISettingsListSerializer(api_settings, many=True).data,
|
|
"users": ProfileSerializer(users, many=True).data,
|
|
},
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
|
|
@extend_schema(
|
|
tags=["Settings"],
|
|
operation_id="api_settings_create",
|
|
parameters=swagger_params.organization_params,
|
|
request=APISettingsSwaggerSerializer,
|
|
responses={
|
|
201: inline_serializer(
|
|
name="DomainCreateResponse",
|
|
fields={
|
|
"error": serializers.BooleanField(),
|
|
"message": serializers.CharField(),
|
|
},
|
|
)
|
|
},
|
|
)
|
|
def post(self, request, *args, **kwargs):
|
|
params = request.data
|
|
assign_to_list = []
|
|
if params.get("lead_assigned_to"):
|
|
assign_to_list = params.get("lead_assigned_to")
|
|
serializer = APISettingsSerializer(data=params)
|
|
if serializer.is_valid():
|
|
settings_obj = serializer.save(
|
|
created_by=request.profile.user, org=request.profile.org
|
|
)
|
|
if params.get("tags"):
|
|
tags = params.get("tags")
|
|
for tag in tags:
|
|
tag_obj = Tags.objects.filter(name=tag).first()
|
|
if not tag_obj:
|
|
tag_obj = Tags.objects.create(name=tag)
|
|
settings_obj.tags.add(tag_obj)
|
|
if assign_to_list:
|
|
settings_obj.lead_assigned_to.add(*assign_to_list)
|
|
return Response(
|
|
{"error": False, "message": "API key added sucessfully"},
|
|
status=status.HTTP_201_CREATED,
|
|
)
|
|
return Response(
|
|
{"error": True, "errors": serializer.errors},
|
|
status=status.HTTP_400_BAD_REQUEST,
|
|
)
|
|
|
|
|
|
class DomainDetailView(APIView):
|
|
model = APISettings
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
def get_object(self, pk):
|
|
return get_object_or_404(APISettings, pk=pk, org=self.request.profile.org)
|
|
|
|
@extend_schema(
|
|
tags=["Settings"],
|
|
operation_id="api_settings_retrieve",
|
|
parameters=swagger_params.organization_params,
|
|
responses={
|
|
200: inline_serializer(
|
|
name="DomainDetailResponse",
|
|
fields={
|
|
"error": serializers.BooleanField(),
|
|
"domain": APISettingsListSerializer(),
|
|
},
|
|
)
|
|
},
|
|
)
|
|
def get(self, request, pk, format=None):
|
|
api_setting = self.get_object(pk)
|
|
return Response(
|
|
{"error": False, "domain": APISettingsListSerializer(api_setting).data},
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
|
|
@extend_schema(
|
|
tags=["Settings"],
|
|
operation_id="api_settings_update",
|
|
parameters=swagger_params.organization_params,
|
|
request=APISettingsSwaggerSerializer,
|
|
responses={
|
|
200: inline_serializer(
|
|
name="DomainUpdateResponse",
|
|
fields={
|
|
"error": serializers.BooleanField(),
|
|
"message": serializers.CharField(),
|
|
},
|
|
)
|
|
},
|
|
)
|
|
def put(self, request, pk, **kwargs):
|
|
api_setting = self.get_object(pk)
|
|
params = request.data
|
|
assign_to_list = []
|
|
if params.get("lead_assigned_to"):
|
|
assign_to_list = params.get("lead_assigned_to")
|
|
serializer = APISettingsSerializer(data=params, instance=api_setting)
|
|
if serializer.is_valid():
|
|
api_setting = serializer.save()
|
|
api_setting.tags.clear()
|
|
api_setting.lead_assigned_to.clear()
|
|
if params.get("tags"):
|
|
tags = params.get("tags")
|
|
for tag in tags:
|
|
tag_obj = Tags.objects.filter(name=tag).first()
|
|
if not tag_obj:
|
|
tag_obj = Tags.objects.create(name=tag)
|
|
api_setting.tags.add(tag_obj)
|
|
if assign_to_list:
|
|
api_setting.lead_assigned_to.add(*assign_to_list)
|
|
return Response(
|
|
{"error": False, "message": "API setting Updated sucessfully"},
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
return Response(
|
|
{"error": True, "errors": serializer.errors},
|
|
status=status.HTTP_400_BAD_REQUEST,
|
|
)
|
|
|
|
@extend_schema(
|
|
tags=["Settings"],
|
|
parameters=swagger_params.organization_params,
|
|
request=APISettingsSwaggerSerializer,
|
|
description="Partial API Settings Update",
|
|
responses={
|
|
200: inline_serializer(
|
|
name="DomainPatchResponse",
|
|
fields={
|
|
"error": serializers.BooleanField(),
|
|
"message": serializers.CharField(),
|
|
},
|
|
)
|
|
},
|
|
)
|
|
def patch(self, request, pk, **kwargs):
|
|
"""Handle partial updates to API settings."""
|
|
api_setting = self.get_object(pk)
|
|
params = request.data
|
|
serializer = APISettingsSerializer(
|
|
data=params, instance=api_setting, partial=True
|
|
)
|
|
if serializer.is_valid():
|
|
api_setting = serializer.save()
|
|
return Response(
|
|
{"error": False, "message": "API setting Updated successfully"},
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
return Response(
|
|
{"error": True, "errors": serializer.errors},
|
|
status=status.HTTP_400_BAD_REQUEST,
|
|
)
|
|
|
|
@extend_schema(
|
|
tags=["Settings"],
|
|
operation_id="api_settings_destroy",
|
|
parameters=swagger_params.organization_params,
|
|
responses={
|
|
200: inline_serializer(
|
|
name="DomainDeleteResponse",
|
|
fields={
|
|
"error": serializers.BooleanField(),
|
|
"message": serializers.CharField(),
|
|
},
|
|
)
|
|
},
|
|
)
|
|
def delete(self, request, pk, **kwargs):
|
|
api_setting = self.get_object(pk)
|
|
if api_setting:
|
|
api_setting.delete()
|
|
return Response(
|
|
{"error": False, "message": "API setting deleted sucessfully"},
|
|
status=status.HTTP_200_OK,
|
|
)
|