feat: logging on sending file error, refactoring
This commit is contained in:
@@ -9,7 +9,7 @@ from backend.config import CHAT_CONNECTOR_API_KEY, CHAT_TELEGRAM_BOT_TOKEN
|
||||
from external.chat.chat_client import ChatClient
|
||||
from external.chat.schemas import *
|
||||
from external.kafka.services.producer_service import ProducerService
|
||||
from models import Message, Chat, MessageStatus, TgGroup, Client, Card, MessageFile
|
||||
from models import Message, Chat, MessageStatus, TgGroup, Client, Card, MessageFile, User
|
||||
from schemas.chat import *
|
||||
from services.base import BaseService
|
||||
|
||||
@@ -162,7 +162,7 @@ class ChatService(BaseService):
|
||||
messages = (await self.session.scalars(stmt)).all()
|
||||
return GetMessagesResponse(messages=messages)
|
||||
|
||||
async def send_message(self, request: SendTextMessageRequest) -> SendTextMessageResponse:
|
||||
async def send_message(self, request: SendTextMessageRequest, user: User) -> SendTextMessageResponse:
|
||||
chat: Optional[Chat] = await self.session.get(Chat, request.message.chat_id)
|
||||
if not chat:
|
||||
return SendTextMessageResponse(ok=False, message=f'Чат с ID: {request.message.chat_id} не найден')
|
||||
@@ -172,6 +172,7 @@ class ChatService(BaseService):
|
||||
created_at=datetime.now(),
|
||||
chat_id=request.message.chat_id,
|
||||
status=MessageStatus.sending,
|
||||
crm_sender_id=user.id,
|
||||
)
|
||||
self.session.add(message)
|
||||
await self.session.commit()
|
||||
@@ -211,39 +212,46 @@ class ChatService(BaseService):
|
||||
files: list[UploadFile],
|
||||
chat_id: int,
|
||||
caption: str,
|
||||
user: User,
|
||||
) -> LoadMessagesResponse:
|
||||
chat: Optional[Chat] = await self.session.get(Chat, chat_id)
|
||||
if not chat:
|
||||
return SendTextMessageResponse(ok=False, message=f'Чат с ID: {chat_id} не найден')
|
||||
|
||||
chat_client = ChatClient(api_key=CHAT_CONNECTOR_API_KEY)
|
||||
response = await chat_client.send_messages_with_files(
|
||||
str(chat.tg_group_id),
|
||||
chat.tg_topic_id,
|
||||
caption,
|
||||
files
|
||||
)
|
||||
|
||||
last_message = None
|
||||
for file_schema in response.files:
|
||||
file = MessageFile(**file_schema.model_dump())
|
||||
self.session.add(file)
|
||||
|
||||
message = Message(
|
||||
text='',
|
||||
created_at=datetime.now(),
|
||||
chat_id=chat_id,
|
||||
status=MessageStatus.success,
|
||||
file=file,
|
||||
try:
|
||||
chat_client = ChatClient(api_key=CHAT_CONNECTOR_API_KEY)
|
||||
response = await chat_client.send_messages_with_files(
|
||||
str(chat.tg_group_id),
|
||||
chat.tg_topic_id,
|
||||
caption,
|
||||
files
|
||||
)
|
||||
last_message = message
|
||||
self.session.add(message)
|
||||
|
||||
if last_message:
|
||||
last_message.text = caption
|
||||
await self.session.commit()
|
||||
last_message = None
|
||||
for file_schema in response.files:
|
||||
file = MessageFile(**file_schema.model_dump())
|
||||
self.session.add(file)
|
||||
|
||||
return LoadMessagesResponse(ok=response.ok, message=response.message)
|
||||
message = Message(
|
||||
text='',
|
||||
created_at=datetime.now(),
|
||||
chat_id=chat_id,
|
||||
status=MessageStatus.success,
|
||||
file=file,
|
||||
crm_sender_id=user.id,
|
||||
)
|
||||
last_message = message
|
||||
self.session.add(message)
|
||||
|
||||
if last_message:
|
||||
last_message.text = caption
|
||||
await self.session.commit()
|
||||
|
||||
return LoadMessagesResponse(ok=response.ok, message=response.message)
|
||||
except ClientConnectorError:
|
||||
return LoadMessagesResponse(ok=False, message='Ошибка подключения к сервису')
|
||||
except Exception as e:
|
||||
return LoadMessagesResponse(ok=False, message=str(e))
|
||||
|
||||
async def _get_message_by_id(self, message_id: int) -> Optional[Message]:
|
||||
stmt = (
|
||||
@@ -286,7 +294,6 @@ class ChatService(BaseService):
|
||||
raise HTTPException(status_code=404, detail=f'Файл с ID {file_id} не найден')
|
||||
|
||||
url: str = f'https://api.telegram.org/file/bot{CHAT_TELEGRAM_BOT_TOKEN}/{file.file_path}'
|
||||
print(f'URL = {url}')
|
||||
|
||||
response = requests.get(url, stream=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user