feat: sending and receiving messages with files, editing text messages
This commit is contained in:
		
							
								
								
									
										24
									
								
								external/kafka/services/consumer_service.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								external/kafka/services/consumer_service.py
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
import pickle
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from typing import Optional
 | 
			
		||||
from uuid import UUID
 | 
			
		||||
 | 
			
		||||
from aiokafka import ConsumerRecord
 | 
			
		||||
@@ -8,13 +7,14 @@ from sqlalchemy import select
 | 
			
		||||
 | 
			
		||||
from external.kafka.enums import KafkaMessageType
 | 
			
		||||
from external.kafka.schemas.consumer import *
 | 
			
		||||
from models import Message, MessageStatus, TgUser, Chat, TgGroup
 | 
			
		||||
from models import Message, MessageStatus, TgUser, Chat, TgGroup, MessageFile
 | 
			
		||||
from services.base import BaseService
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ConsumerService(BaseService):
 | 
			
		||||
    async def consume_message(self, message: ConsumerRecord):
 | 
			
		||||
        value = pickle.loads(message.value)
 | 
			
		||||
        print("Consumer: received message: ", value)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            if 'ok' in value:
 | 
			
		||||
@@ -36,7 +36,8 @@ class ConsumerService(BaseService):
 | 
			
		||||
                response = SendMessageToConnectorResponse.model_validate(value)
 | 
			
		||||
                await self._process_connector_send_response(response)
 | 
			
		||||
            case KafkaMessageType.EDIT:
 | 
			
		||||
                pass
 | 
			
		||||
                response = EditMessageResponse.model_validate(value)
 | 
			
		||||
                await self._process_connector_edit_response(response)
 | 
			
		||||
            case KafkaMessageType.DELETE:
 | 
			
		||||
                response = DeleteMessageResponse.model_validate(value)
 | 
			
		||||
                await self._process_connector_delete_response(response)
 | 
			
		||||
@@ -59,6 +60,16 @@ class ConsumerService(BaseService):
 | 
			
		||||
 | 
			
		||||
        message = await self.session.get(Message, response.message_id)
 | 
			
		||||
        message.is_deleted = True
 | 
			
		||||
        await self.session.commit()
 | 
			
		||||
 | 
			
		||||
    async def _process_connector_edit_response(self, response: EditMessageResponse):
 | 
			
		||||
        if not response.ok:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        message = await self.session.get(Message, response.message_id)
 | 
			
		||||
        message.text = response.text
 | 
			
		||||
        message.is_edited = True
 | 
			
		||||
        await self.session.commit()
 | 
			
		||||
 | 
			
		||||
    async def _get_chat(self, group_id: str, tg_topic_id: int) -> Optional[Chat]:
 | 
			
		||||
        stmt = (
 | 
			
		||||
@@ -81,12 +92,17 @@ class ConsumerService(BaseService):
 | 
			
		||||
        if not chat:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        file = None
 | 
			
		||||
        if request.message.file:
 | 
			
		||||
            file = MessageFile(**request.message.file.model_dump())
 | 
			
		||||
 | 
			
		||||
        message = Message(
 | 
			
		||||
            text=request.message.text,
 | 
			
		||||
            text=request.message.text if request.message.text else "",
 | 
			
		||||
            created_at=datetime.now(),
 | 
			
		||||
            tg_sender_id=tg_sender.id,
 | 
			
		||||
            chat_id=chat.id,
 | 
			
		||||
            status=MessageStatus.success,
 | 
			
		||||
            file=file,
 | 
			
		||||
        )
 | 
			
		||||
        self.session.add(message)
 | 
			
		||||
        await self.session.commit()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user