feat: Automatically mark messages as delivered when recipients come online or receive new messages.
This commit is contained in:
@@ -99,6 +99,26 @@ export class MessagesGateway implements OnGatewayConnection, OnGatewayDisconnect
|
||||
.catch((err) => {
|
||||
this.logger.warn(`Failed to update online status for ${userId}: ${err.message}`);
|
||||
});
|
||||
|
||||
// Mark pending SENT messages as DELIVERED now that this user is online
|
||||
this.messagesService.markPendingMessagesAsDelivered(userId)
|
||||
.then((results) => {
|
||||
for (const result of results) {
|
||||
// Notify each sender that their messages were delivered
|
||||
const deliveredEvent = {
|
||||
messageIds: result.messageIds,
|
||||
conversationId: result.conversationId,
|
||||
deliveredAt: result.deliveredAt,
|
||||
};
|
||||
this.sendToUser(result.senderId, 'message_delivered', deliveredEvent);
|
||||
}
|
||||
if (results.length > 0) {
|
||||
this.logger.log(`Marked pending messages as delivered for ${userId} across ${results.length} conversation(s)`);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.logger.warn(`Failed to mark pending messages as delivered for ${userId}: ${err.message}`);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -190,6 +210,18 @@ export class MessagesGateway implements OnGatewayConnection, OnGatewayDisconnect
|
||||
? participants.agentUserId
|
||||
: participants.userId;
|
||||
this.sendToUser(otherUserId, 'new_message', message);
|
||||
|
||||
// Auto-mark as DELIVERED if recipient is online
|
||||
if (this.isUserOnline(otherUserId)) {
|
||||
await this.messagesService.markMessageDelivered(message.id);
|
||||
const deliveredEvent = {
|
||||
messageId: message.id,
|
||||
conversationId: data.conversationId,
|
||||
deliveredAt: new Date(),
|
||||
};
|
||||
// Notify sender that message was delivered
|
||||
this.sendToUser(client.userId, 'message_delivered', deliveredEvent);
|
||||
}
|
||||
}
|
||||
} catch (participantError) {
|
||||
this.logger.warn(`Failed to get participants for direct delivery in ${data.conversationId}: ${participantError.message}`);
|
||||
|
||||
Reference in New Issue
Block a user