feat: creating chats for cards and clients, sending and deleting text messages
This commit is contained in:
		
							
								
								
									
										60
									
								
								external/kafka/services/producer_service.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								external/kafka/services/producer_service.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
import pickle
 | 
			
		||||
from uuid import UUID
 | 
			
		||||
 | 
			
		||||
from aiohttp import ClientConnectorError
 | 
			
		||||
 | 
			
		||||
from backend.config import KAFKA_PRODUCER_TOPIC, CHAT_CONNECTOR_API_KEY
 | 
			
		||||
from external.kafka import producer
 | 
			
		||||
from external.kafka.enums import KafkaMessageType
 | 
			
		||||
from external.kafka.schemas.producer import MessageSchema, SendMessageToConnectorRequest, \
 | 
			
		||||
    SendMessageDeletingToConnectorRequest, BaseMessageSchema
 | 
			
		||||
from services.base import BaseService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProducerService(BaseService):
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    async def send_message_to_connector(
 | 
			
		||||
            message_text: str,
 | 
			
		||||
            group_id: UUID,
 | 
			
		||||
            topic_id: int,
 | 
			
		||||
            message_id: int,
 | 
			
		||||
    ) -> tuple[bool, str]:
 | 
			
		||||
        try:
 | 
			
		||||
            request = SendMessageToConnectorRequest(
 | 
			
		||||
                message=MessageSchema(
 | 
			
		||||
                    message_id=message_id,
 | 
			
		||||
                    text=message_text,
 | 
			
		||||
                    group_id=str(group_id),
 | 
			
		||||
                    topic_id=topic_id,
 | 
			
		||||
                ),
 | 
			
		||||
                message_type=KafkaMessageType.SEND,
 | 
			
		||||
                app_auth_key=CHAT_CONNECTOR_API_KEY,
 | 
			
		||||
            )
 | 
			
		||||
            await producer.send(KAFKA_PRODUCER_TOPIC, value=pickle.dumps(request.model_dump()))
 | 
			
		||||
        except ClientConnectorError:
 | 
			
		||||
            return False, 'Ошибка подключения к коннектору'
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            return False, str(e)
 | 
			
		||||
 | 
			
		||||
        return True, 'Сообщение отправлено'
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    async def send_message_deleting_to_connector(message_id: int, tg_message_id: int, group_id: UUID) -> tuple[bool, str]:
 | 
			
		||||
        try:
 | 
			
		||||
            request = SendMessageDeletingToConnectorRequest(
 | 
			
		||||
                message_type=KafkaMessageType.DELETE,
 | 
			
		||||
                app_auth_key=CHAT_CONNECTOR_API_KEY,
 | 
			
		||||
                message=BaseMessageSchema(
 | 
			
		||||
                    message_id=message_id,
 | 
			
		||||
                    tg_message_id=tg_message_id,
 | 
			
		||||
                    group_id=str(group_id),
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
            await producer.send(KAFKA_PRODUCER_TOPIC, value=pickle.dumps(request.model_dump()))
 | 
			
		||||
        except ClientConnectorError:
 | 
			
		||||
            return False, 'Ошибка подключения к коннектору'
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            return False, str(e)
 | 
			
		||||
        
 | 
			
		||||
        return True, 'Сообщение отправлено'
 | 
			
		||||
    
 | 
			
		||||
		Reference in New Issue
	
	Block a user