from rest_framework.views import APIView from django.contrib.auth.mixins import LoginRequiredMixin from rest_framework import status from django.http import HttpResponse from core.models import QueuedMessage, Message from core.forms import QueueForm import requests import orjson from django.conf import settings import redis import msgpack from mixins.views import ( ObjectCreate, ObjectDelete, ObjectList, ObjectUpdate, ) # def start_typing(uuid): # url = f"http://signal:8080/v1/typing_indicator/{settings.SIGNAL_NUMBER}" # data = { # "recipient": uuid, # } # response = requests.put(url, json=data) # def stop_typing(uuid): # url = f"http://signal:8080/v1/typing_indicator/{settings.SIGNAL_NUMBER}" # data = { # "recipient": uuid, # } # response = requests.delete(url, json=data) r = redis.from_url("unix://var/run/gia-redis.sock", db=10) class AcceptMessageAPI(LoginRequiredMixin, APIView): def get(self, request, message_id): to_submit = { "type": "def", "method": "accept_message", "user_id": request.user.id, "message_id": message_id, } packed = msgpack.packb(to_submit, use_bin_type=True) r.publish("processing", packed) return HttpResponse(status=status.HTTP_200_OK) class RejectMessageAPI(LoginRequiredMixin, APIView): def get(self, request, message_id): try: message = QueuedMessage.objects.get( user=self.request.user, id=message_id, ) except QueuedMessage.DoesNotExist: return HttpResponse(status=status.HTTP_404_NOT_FOUND) message.delete() return HttpResponse(status=status.HTTP_200_OK) class QueueList(LoginRequiredMixin, ObjectList): list_template = "partials/queue-list.html" model = QueuedMessage page_title = "Queues" list_url_name = "queues" list_url_args = ["type"] submit_url_name = "queue_create" class QueueCreate(LoginRequiredMixin, ObjectCreate): model = QueuedMessage form_class = QueueForm submit_url_name = "queue_create" class QueueUpdate(LoginRequiredMixin, ObjectUpdate): model = QueuedMessage form_class = QueueForm submit_url_name = "queue_update" class QueueDelete(LoginRequiredMixin, ObjectDelete): model = QueuedMessage