50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from datetime import UTC, datetime
|
|
|
|
from app.database.models import Message, TelegramUser
|
|
from app.database.repositories import MemoryRepository
|
|
|
|
|
|
class MemoryService:
|
|
def __init__(self, repository: MemoryRepository):
|
|
self.repository = repository
|
|
|
|
async def record(
|
|
self,
|
|
*,
|
|
chat_id: int,
|
|
message_id: int,
|
|
thread_id: int | None,
|
|
user_id: int | None,
|
|
user_name: str,
|
|
text: str,
|
|
sent_at: datetime,
|
|
reply_to: int | None,
|
|
message_type: str,
|
|
attachment_data: dict | None = None,
|
|
edited: bool = False,
|
|
) -> Message:
|
|
if user_id is not None:
|
|
user = await self.repository.session.get(TelegramUser, user_id)
|
|
if user is None:
|
|
self.repository.session.add(
|
|
TelegramUser(telegram_id=user_id, display_name=user_name)
|
|
)
|
|
else:
|
|
user.display_name = user_name
|
|
return await self.repository.save_message(
|
|
Message(
|
|
chat_id=chat_id,
|
|
telegram_message_id=message_id,
|
|
thread_id=thread_id,
|
|
user_id=user_id,
|
|
user_name=user_name,
|
|
text=text,
|
|
sent_at=sent_at.astimezone(UTC),
|
|
reply_to_message_id=reply_to,
|
|
message_type=message_type,
|
|
attachment_data=attachment_data,
|
|
edited=edited,
|
|
edited_at=datetime.now(UTC) if edited else None,
|
|
)
|
|
)
|