78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
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 *
|
|
from services.base import BaseService
|
|
|
|
|
|
class ProducerService(BaseService):
|
|
@staticmethod
|
|
async def _send_message(request: BaseConnectorRequest):
|
|
try:
|
|
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_to_connector(
|
|
message_text: str,
|
|
group_id: UUID,
|
|
topic_id: int,
|
|
message_id: int,
|
|
) -> tuple[bool, str]:
|
|
request = SendMessageToConnectorRequest(
|
|
message_type=KafkaMessageType.SEND,
|
|
app_auth_key=CHAT_CONNECTOR_API_KEY,
|
|
message=MessageSchema(
|
|
message_id=message_id,
|
|
text=message_text,
|
|
group_id=str(group_id),
|
|
topic_id=topic_id,
|
|
),
|
|
)
|
|
return await ProducerService._send_message(request)
|
|
|
|
@staticmethod
|
|
async def send_message_deleting_to_connector(
|
|
message_id: int,
|
|
tg_message_id: int,
|
|
group_id: UUID,
|
|
) -> tuple[bool, str]:
|
|
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),
|
|
),
|
|
)
|
|
return await ProducerService._send_message(request)
|
|
|
|
@staticmethod
|
|
async def send_message_editing_to_connector(
|
|
message_id: int,
|
|
tg_message_id: int,
|
|
group_id: UUID,
|
|
text: str,
|
|
) -> tuple[bool, str]:
|
|
request = SendMessageEditingToConnectorRequest(
|
|
message_type=KafkaMessageType.EDIT,
|
|
app_auth_key=CHAT_CONNECTOR_API_KEY,
|
|
message=EditMessageSchema(
|
|
message_id=message_id,
|
|
tg_message_id=tg_message_id,
|
|
group_id=str(group_id),
|
|
text=text,
|
|
),
|
|
)
|
|
return await ProducerService._send_message(request)
|