real time messaging
This commit is contained in:
@@ -2,6 +2,7 @@ const express = require('express');
|
||||
const { Message, User } = require('../models');
|
||||
const { authenticateToken } = require('../middleware/auth');
|
||||
const logger = require('../utils/logger');
|
||||
const { emitNewMessage, emitMessageRead } = require('../sockets/messageSocket');
|
||||
const router = express.Router();
|
||||
|
||||
// Get all messages for the current user (inbox)
|
||||
@@ -109,15 +110,26 @@ router.get('/:id', authenticateToken, async (req, res) => {
|
||||
}
|
||||
|
||||
// Mark as read if user is the receiver
|
||||
if (message.receiverId === req.user.id && !message.isRead) {
|
||||
const wasUnread = message.receiverId === req.user.id && !message.isRead;
|
||||
if (wasUnread) {
|
||||
await message.update({ isRead: true });
|
||||
|
||||
// Emit socket event to sender for real-time read receipt
|
||||
const io = req.app.get('io');
|
||||
if (io) {
|
||||
emitMessageRead(io, message.senderId, {
|
||||
messageId: message.id,
|
||||
readAt: new Date().toISOString(),
|
||||
readBy: req.user.id
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const reqLogger = logger.withRequestId(req.id);
|
||||
reqLogger.info("Message fetched", {
|
||||
userId: req.user.id,
|
||||
messageId: req.params.id,
|
||||
markedAsRead: message.receiverId === req.user.id && !message.isRead
|
||||
markedAsRead: wasUnread
|
||||
});
|
||||
|
||||
res.json(message);
|
||||
@@ -165,6 +177,12 @@ router.post('/', authenticateToken, async (req, res) => {
|
||||
}]
|
||||
});
|
||||
|
||||
// Emit socket event to receiver for real-time notification
|
||||
const io = req.app.get('io');
|
||||
if (io) {
|
||||
emitNewMessage(io, receiverId, messageWithSender.toJSON());
|
||||
}
|
||||
|
||||
const reqLogger = logger.withRequestId(req.id);
|
||||
reqLogger.info("Message sent", {
|
||||
senderId: req.user.id,
|
||||
@@ -202,6 +220,16 @@ router.put('/:id/read', authenticateToken, async (req, res) => {
|
||||
|
||||
await message.update({ isRead: true });
|
||||
|
||||
// Emit socket event to sender for real-time read receipt
|
||||
const io = req.app.get('io');
|
||||
if (io) {
|
||||
emitMessageRead(io, message.senderId, {
|
||||
messageId: message.id,
|
||||
readAt: new Date().toISOString(),
|
||||
readBy: req.user.id
|
||||
});
|
||||
}
|
||||
|
||||
const reqLogger = logger.withRequestId(req.id);
|
||||
reqLogger.info("Message marked as read", {
|
||||
userId: req.user.id,
|
||||
|
||||
Reference in New Issue
Block a user