mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-15 18:25:18 +02:00
Add CommentReplyNotificationHandler for comment thread notifications
This commit is contained in:
parent
8c60910148
commit
fb333fdd54
1 changed files with 93 additions and 0 deletions
|
|
@ -861,6 +861,98 @@ class MentionNotificationHandler(BaseNotificationHandler):
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
class CommentReplyNotificationHandler(BaseNotificationHandler):
|
||||||
|
"""Handler for comment reply notifications."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__("comment_reply")
|
||||||
|
|
||||||
|
async def find_notification_by_reply(
|
||||||
|
self,
|
||||||
|
session: AsyncSession,
|
||||||
|
reply_id: int,
|
||||||
|
user_id: UUID,
|
||||||
|
) -> Notification | None:
|
||||||
|
query = select(Notification).where(
|
||||||
|
Notification.type == self.notification_type,
|
||||||
|
Notification.user_id == user_id,
|
||||||
|
Notification.notification_metadata["reply_id"].astext == str(reply_id),
|
||||||
|
)
|
||||||
|
result = await session.execute(query)
|
||||||
|
return result.scalar_one_or_none()
|
||||||
|
|
||||||
|
async def notify_comment_reply(
|
||||||
|
self,
|
||||||
|
session: AsyncSession,
|
||||||
|
user_id: UUID,
|
||||||
|
reply_id: int,
|
||||||
|
parent_comment_id: int,
|
||||||
|
message_id: int,
|
||||||
|
thread_id: int,
|
||||||
|
thread_title: str,
|
||||||
|
author_id: str,
|
||||||
|
author_name: str,
|
||||||
|
author_avatar_url: str | None,
|
||||||
|
author_email: str,
|
||||||
|
content_preview: str,
|
||||||
|
search_space_id: int,
|
||||||
|
) -> Notification:
|
||||||
|
existing = await self.find_notification_by_reply(session, reply_id, user_id)
|
||||||
|
if existing:
|
||||||
|
logger.info(
|
||||||
|
f"Notification already exists for reply {reply_id} to user {user_id}"
|
||||||
|
)
|
||||||
|
return existing
|
||||||
|
|
||||||
|
title = f"{author_name} replied in a thread"
|
||||||
|
message = content_preview[:100] + ("..." if len(content_preview) > 100 else "")
|
||||||
|
|
||||||
|
metadata = {
|
||||||
|
"reply_id": reply_id,
|
||||||
|
"parent_comment_id": parent_comment_id,
|
||||||
|
"message_id": message_id,
|
||||||
|
"thread_id": thread_id,
|
||||||
|
"thread_title": thread_title,
|
||||||
|
"author_id": author_id,
|
||||||
|
"author_name": author_name,
|
||||||
|
"author_avatar_url": author_avatar_url,
|
||||||
|
"author_email": author_email,
|
||||||
|
"content_preview": content_preview[:200],
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
notification = Notification(
|
||||||
|
user_id=user_id,
|
||||||
|
search_space_id=search_space_id,
|
||||||
|
type=self.notification_type,
|
||||||
|
title=title,
|
||||||
|
message=message,
|
||||||
|
notification_metadata=metadata,
|
||||||
|
)
|
||||||
|
session.add(notification)
|
||||||
|
await session.commit()
|
||||||
|
await session.refresh(notification)
|
||||||
|
logger.info(
|
||||||
|
f"Created comment_reply notification {notification.id} for user {user_id}"
|
||||||
|
)
|
||||||
|
return notification
|
||||||
|
except Exception as e:
|
||||||
|
await session.rollback()
|
||||||
|
if (
|
||||||
|
"duplicate key" in str(e).lower()
|
||||||
|
or "unique constraint" in str(e).lower()
|
||||||
|
):
|
||||||
|
logger.warning(
|
||||||
|
f"Duplicate notification for reply {reply_id} to user {user_id}"
|
||||||
|
)
|
||||||
|
existing = await self.find_notification_by_reply(
|
||||||
|
session, reply_id, user_id
|
||||||
|
)
|
||||||
|
if existing:
|
||||||
|
return existing
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
class PageLimitNotificationHandler(BaseNotificationHandler):
|
class PageLimitNotificationHandler(BaseNotificationHandler):
|
||||||
"""Handler for page limit exceeded notifications."""
|
"""Handler for page limit exceeded notifications."""
|
||||||
|
|
||||||
|
|
@ -959,6 +1051,7 @@ class NotificationService:
|
||||||
connector_indexing = ConnectorIndexingNotificationHandler()
|
connector_indexing = ConnectorIndexingNotificationHandler()
|
||||||
document_processing = DocumentProcessingNotificationHandler()
|
document_processing = DocumentProcessingNotificationHandler()
|
||||||
mention = MentionNotificationHandler()
|
mention = MentionNotificationHandler()
|
||||||
|
comment_reply = CommentReplyNotificationHandler()
|
||||||
page_limit = PageLimitNotificationHandler()
|
page_limit = PageLimitNotificationHandler()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue