# Deferred processing library from core.util import logs from pydantic import BaseModel from typing import Annotated from uuid import UUID from pydantic import ValidationError from core.models import QueuedMessage, Message from core.clients import signal from core.lib.prompts.functions import delete_messages from asgiref.sync import sync_to_async log = logs.get_logger("deferred") class DeferredRequest(BaseModel): type: str method: str user_id: int message_id: Annotated[str, UUID] async def process_deferred(data: dict): try: validated_data = DeferredRequest(**data) log.info(f"Validated Data: {validated_data}") # Process the validated data except ValidationError as e: log.info(f"Validation Error: {e}") return method = validated_data.method user_id = validated_data.user_id message_id = validated_data.message_id try: message = await sync_to_async(QueuedMessage.objects.get)( user_id=user_id, id=message_id, ) log.info(f"Got {message}") except QueuedMessage.DoesNotExist: log.info(f"Didn't get message from {message_id}") return if message.session.identifier.service == "signal": log.info(f"Is sisngla") if method == "accept_message": await signal.send_message(message) else: log.warning(f"Method not yet supported: {method}") return else: log.warning(f"Protocol not supported: {message.session.identifier.service}") return