diff --git a/chats/apps/api/v1/internal/eda_clients/billing_client.py b/chats/apps/api/v1/internal/eda_clients/billing_client.py new file mode 100644 index 00000000..a2bbd5d2 --- /dev/null +++ b/chats/apps/api/v1/internal/eda_clients/billing_client.py @@ -0,0 +1,17 @@ +from django.conf import settings + +from chats.apps.event_driven.base_app import EventDrivenAPP + + +class RoomsInfoMixin: + base_room_exchange = settings.ROOMS_INFO_EXCHANGE + + def request_room(self, content): + """ + Generic function to handle room actions + """ + EventDrivenAPP().backend.basic_publish( + content=content, + exchange=self.base_room_exchange, + headers={"callback_exchange": settings.DEFAULT_DEAD_LETTER_EXCHANGE}, + ) diff --git a/chats/apps/api/v1/rooms/viewsets.py b/chats/apps/api/v1/rooms/viewsets.py index 52ce0fe5..c867920c 100644 --- a/chats/apps/api/v1/rooms/viewsets.py +++ b/chats/apps/api/v1/rooms/viewsets.py @@ -40,6 +40,7 @@ ) from django.utils.timezone import make_aware from datetime import datetime +from chats.apps.projects.usecases.send_room_info import RoomInfoUseCase class RoomViewset( @@ -166,6 +167,10 @@ def close( return Response(serialized_data.data, status=status.HTTP_200_OK) close_room(str(instance.pk)) + + room_client = RoomInfoUseCase() + room_client.get_room(instance) + return Response(serialized_data.data, status=status.HTTP_200_OK) def perform_create(self, serializer): diff --git a/chats/apps/projects/usecases/send_room_info.py b/chats/apps/projects/usecases/send_room_info.py new file mode 100644 index 00000000..3127ee0c --- /dev/null +++ b/chats/apps/projects/usecases/send_room_info.py @@ -0,0 +1,16 @@ +from chats.apps.api.v1.internal.eda_clients.billing_client import RoomsInfoMixin +from chats.apps.rooms.models import Room + + +class RoomInfoUseCase: + def __init__(self): + self._rooms_client = RoomsInfoMixin() + + def get_room(self, room: Room): + room = { + "uuid": str(room.uuid), + "project_uuid": str(room.project.uuid), + "external_id": room.contact.external_id, + "created_on": room.created_on.isoformat(), + } + self._rooms_client.request_room(content=room) diff --git a/chats/settings.py b/chats/settings.py index b68de223..f787aaec 100644 --- a/chats/settings.py +++ b/chats/settings.py @@ -403,6 +403,8 @@ FLOWS_TICKETER_EXCHANGE = env("FLOWS_TICKETER_EXCHANGE", default="sectors.topic") FLOWS_QUEUE_EXCHANGE = env("FLOWS_QUEUE_EXCHANGE", default="queues.topic") + ROOMS_INFO_EXCHANGE = env("ROOMS_INFO_EXCHANGE", default="rooms.topic") + FLOWS_DEFAULT_DEAD_LETTER_EXCHANGE = env( "FLOWS_DEFAULT_DEAD_LETTER_EXCHANGE", default="flows.dlx.topic" )