Skip to content

Commit

Permalink
commit merge
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanJaeger committed Feb 4, 2025
2 parents cdeb223 + e3720c4 commit 76aceeb
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 0 deletions.
18 changes: 18 additions & 0 deletions chats/apps/api/v1/projects/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
from chats.apps.rooms.views import create_room_feedback_message
from chats.apps.sectors.models import Sector

from chats.apps.projects.usecases.integrate_ticketers import IntegratedTicketers


class ProjectViewset(
mixins.ListModelMixin,
Expand Down Expand Up @@ -518,3 +520,19 @@ def update_access(self, request, *args, **kwargs):
status.HTTP_401_UNAUTHORIZED,
)
return Response(serialized_data.data, status=status.HTTP_200_OK)

@action(detail=False, methods=["POST"], url_name="integrate_sectors")
def integrate_sectors(self, request, *args, **kwargs):
try:
project = Project.objects.get(uuid=request.query_params["project"])
integrations = IntegratedTicketers()

integrations.integrate_ticketer(project)
integrations.integrate_topic(project)
except Exception as error:
return Response(
{"error integrating ticketers": f"{type(error)}: {error}"},
status=status.HTTP_400_BAD_REQUEST,
)

return Response("ticketers and topics integrated", status=status.HTTP_200_OK)
12 changes: 12 additions & 0 deletions chats/apps/api/v1/queues/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@

from .serializers import QueueAgentsSerializer


from chats.apps.projects.usecases.integrate_ticketers import IntegratedTicketers


User = get_user_model()


Expand Down Expand Up @@ -60,6 +64,9 @@ def get_serializer_class(self):

def perform_create(self, serializer):
instance = serializer.save()

project = Project.objects.get(uuid=instance.sector.project.uuid)

content = {
"uuid": str(instance.uuid),
"name": instance.name,
Expand All @@ -74,6 +81,11 @@ def perform_create(self, serializer):
raise exceptions.APIException(
detail=f"[{response.status_code}] Error posting the queue on flows. Exception: {response.content}"
)

if project.config.get("its_principal"):
integrate_use_case = IntegratedTicketers()
integrate_use_case.integrate_topic(project)

return instance

def perform_update(self, serializer):
Expand Down
7 changes: 7 additions & 0 deletions chats/apps/api/v1/sectors/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
)
from chats.apps.projects.models import Project
from chats.apps.sectors.models import Sector, SectorAuthorization, SectorTag
from chats.apps.projects.usecases.integrate_ticketers import IntegratedTicketers


class SectorViewset(viewsets.ModelViewSet):
Expand Down Expand Up @@ -66,6 +67,9 @@ def perform_create(self, serializer):
raise exceptions.APIException(
detail=f"Error when saving the sector. Exception: {str(e)}" # NOQA
)

project = Project.objects.get(uuid=instance.project.uuid)

content = {
"project_uuid": str(instance.project.uuid),
"name": instance.name,
Expand All @@ -87,6 +91,9 @@ def perform_create(self, serializer):
raise exceptions.APIException(
detail=f"[{response.status_code}] Error posting the sector/ticketer on flows. Exception: {response.content}" # NOQA
)
if project.config.get("its_main"):
integrate_use_case = IntegratedTicketers()
integrate_use_case.integrate_ticketer(project)

def update(self, request, *args, **kwargs):
sector = self.get_object()
Expand Down
66 changes: 66 additions & 0 deletions chats/apps/projects/usecases/integrate_ticketers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from chats.apps.projects.models import Project
from chats.apps.sectors.models import Sector
from chats.apps.queues.models import Queue

from chats.apps.api.v1.internal.rest_clients.connect_rest_client import (
ConnectRESTClient,
)
from rest_framework import exceptions, status
from chats.apps.api.v1.internal.rest_clients.flows_rest_client import FlowRESTClient


class IntegratedTicketers:
def integrate_ticketer(self, project):
projects = Project.objects.filter(org=project.org).exclude(
config__its_main=True
)

for secundary_project in projects:
sectors = Sector.objects.filter(
project=project, config__integration_token=secundary_project.uuid
)

for sector in sectors:
content = {
"project_uuid": str(secundary_project.uuid),
"name": sector.name,
"config": {
"project_auth": str(sector.external_token.pk),
"sector_uuid": str(sector.uuid),
},
}
connect = ConnectRESTClient()
response = connect.create_ticketer(**content)
if response.status_code not in [
status.HTTP_200_OK,
status.HTTP_201_CREATED,
]:
raise exceptions.APIException(
detail=f"[{response.status_code}] Error posting the sector/ticketer on flows. Exception: {response.content}"
)

def integrate_topic(self, project):
projects = Project.objects.filter(org=project.org).exclude(
config__its_main=True
)
for secundary_project in projects:
queues = Queue.objects.filter(
sector__project=project,
sector__project__config__integration_token=secundary_project.uuid,
)

for queue in queues:
content = {
"uuid": str(queue.uuid),
"name": queue.name,
"sector_uuid": str(queue.sector.uuid),
"project_uuid": str(secundary_project.uuid),
}
response = FlowRESTClient().create_queue(**content)
if response.status_code not in [
status.HTTP_200_OK,
status.HTTP_201_CREATED,
]:
raise exceptions.APIException(
detail=f"[{response.status_code}] Error posting the queue on flows. Exception: {response.content}"
)

0 comments on commit 76aceeb

Please sign in to comment.