Skip to content

Commit 98dfb4c

Browse files
committed
Chat Room unread counts
1 parent 9d62802 commit 98dfb4c

4 files changed

Lines changed: 9 additions & 5 deletions

File tree

obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16324,7 +16324,7 @@ trait APIMethods600 {
1632416324
val count = if (isOpenRoom) {
1632516325
code.chat.ChatMessageTrait.chatMessageProvider.vend.getUnreadMentionCount(p.chatRoomId, p.userId, p.lastReadAt)
1632616326
} else {
16327-
code.chat.ChatMessageTrait.chatMessageProvider.vend.getUnreadCount(p.chatRoomId, p.lastReadAt)
16327+
code.chat.ChatMessageTrait.chatMessageProvider.vend.getUnreadCount(p.chatRoomId, p.userId, p.lastReadAt)
1632816328
}
1632916329
count.toList.map(c => UnreadCountJsonV600(chat_room_id = p.chatRoomId, unread_count = c))
1633016330
}

obp-api/src/main/scala/code/chat/ChatEventPublisher.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ object ChatEventPublisher extends MdcLoggable {
5858

5959
def afterCreate(msg: ChatMessageTrait, senderUsername: String, senderProvider: String, senderConsumerName: String): Unit = {
6060
publishMessageEvent("new", msg, senderUsername, senderProvider, senderConsumerName)
61+
// Sending a message means the sender has "read" the room up to this point
62+
ParticipantTrait.participantProvider.vend.updateLastReadAt(msg.chatRoomId, msg.senderUserId)
6163
Future { broadcastUnreadCounts(msg) }(ExecutionContext.global)
6264
}
6365

@@ -124,7 +126,7 @@ object ChatEventPublisher extends MdcLoggable {
124126
} else {
125127
// Private rooms: notify all participants
126128
val count = ChatMessageTrait.chatMessageProvider.vend
127-
.getUnreadCount(msg.chatRoomId, p.lastReadAt).openOr(0L)
129+
.getUnreadCount(msg.chatRoomId, p.userId, p.lastReadAt).openOr(0L)
128130
afterUnreadCountChange(p.userId, msg.chatRoomId, count)
129131
}
130132
}

obp-api/src/main/scala/code/chat/ChatMessageTrait.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ trait ChatMessageProvider {
2525
def getMessages(chatRoomId: String, limit: Int, offset: Int, fromDate: Date, toDate: Date): Box[List[ChatMessageTrait]]
2626
def getThreadReplies(threadId: String): Box[List[ChatMessageTrait]]
2727
def getMentionsForUser(userId: String, limit: Int, offset: Int): Box[List[ChatMessageTrait]]
28-
def getUnreadCount(chatRoomId: String, sinceDate: Date): Box[Long]
28+
def getUnreadCount(chatRoomId: String, userId: String, sinceDate: Date): Box[Long]
2929
def getUnreadMentionCount(chatRoomId: String, userId: String, sinceDate: Date): Box[Long]
3030

3131
def updateMessage(chatMessageId: String, content: String): Box[ChatMessageTrait]

obp-api/src/main/scala/code/chat/MappedChatMessage.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,12 @@ object MappedChatMessageProvider extends ChatMessageProvider {
7575
if (sinceDate.before(sixtyDaysAgo)) sixtyDaysAgo else sinceDate
7676
}
7777

78-
override def getUnreadCount(chatRoomId: String, sinceDate: Date): Box[Long] = {
78+
override def getUnreadCount(chatRoomId: String, userId: String, sinceDate: Date): Box[Long] = {
7979
tryo {
8080
ChatMessage.count(
8181
By(ChatMessage.ChatRoomId, chatRoomId),
82-
By_>(ChatMessage.createdAt, effectiveSinceDate(sinceDate))
82+
By_>(ChatMessage.createdAt, effectiveSinceDate(sinceDate)),
83+
NotBy(ChatMessage.SenderUserId, userId)
8384
)
8485
}
8586
}
@@ -89,6 +90,7 @@ object MappedChatMessageProvider extends ChatMessageProvider {
8990
ChatMessage.count(
9091
By(ChatMessage.ChatRoomId, chatRoomId),
9192
By_>(ChatMessage.createdAt, effectiveSinceDate(sinceDate)),
93+
NotBy(ChatMessage.SenderUserId, userId),
9294
Like(ChatMessage.MentionedUserIds, s"%$userId%")
9395
)
9496
}

0 commit comments

Comments
 (0)