Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why my code is not saving the user but giving me everthing ok in response?

Why my code is not saving the user but giving me everything ok in response? it’s giving me a Message marked as seen. in response when I hit the API but when I check my database I can’t see any changes the status is still sent but not seen but when I hit it give me a response ok how to fix this problem? I checked many times it does not update

router.post('/markasread', async (req, res) => {
    const { RoomId, RecieverId } = req.body;


try {
  // Find the recipient's document using their ID
  const recipient = await User.findOne({ _id: RecieverId });

  // Find the message in the recipient's "AllMessages" array using the room ID
  const messageIndex = recipient.AllMessages.findIndex(
    message => message.RoomId === RoomId
  );

  if (messageIndex !== -1) {
    // Update the status of the message to "seen"
    recipient.AllMessages[messageIndex].status = "seen";
    await recipient.save();
  }

  res.status(200).send("Message marked as seen.");
} catch (err) {
  console.log(err);
  res.status(500).send("Error marking message as seen.");
}
  });

This is my all messages array:

   AllMessages: {
        type: Array,
        default: [],
    },

and this is how i am creating objects inside it:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

router.post('/message', async (req, res) => {
    const { SenderId, message, RoomId, RecieverId, LastMessage, status } = req.body;
    console.log(status)
    try {
        const newMessage = new Message({
            SenderId,
            message,
            RoomId,
            RecieverId,
            timestamp: Date.now(),
        });
        await newMessage.save();

        const date = Date.now();
        const sender = await User.findOne({ _id: SenderId });
        const receiver = await User.findOne({ _id: RecieverId });

        const roomExistsInSender = sender.AllMessages.some(
            (msg) => msg.RoomId === RoomId
        );
        if (!roomExistsInSender) {
            sender.AllMessages.push({
                SenderId,
                RecieverId,
                LastMessage,
                RoomId,
                status,
                date,
            });
            await sender.save();
        }

        const roomExistsInReceiver = receiver.AllMessages.some(
            (msg) => msg.RoomId === RoomId
        );
        if (!roomExistsInReceiver) {
            receiver.AllMessages.push({
                SenderId,
                RecieverId,
                LastMessage,
                RoomId,
                status,
                date,
            });
            await receiver.save();
        }

        await User.updateOne(
            { _id: SenderId, 'AllMessages.RoomId': RoomId },
            {
                $set: {
                    'AllMessages.$.SenderId': SenderId,
                    'AllMessages.$.RecieverId': RecieverId,
                    'AllMessages.$.LastMessage': LastMessage,
                    'AllMessages.$.status': status,
                    'AllMessages.$.date': date,
                },
            },
        );

        await User.updateOne(
            { _id: RecieverId, 'AllMessages.RoomId': RoomId },
            {
                $set: {
                    'AllMessages.$.SenderId': SenderId,
                    'AllMessages.$.RecieverId': RecieverId,
                    'AllMessages.$.LastMessage': LastMessage,
                    'AllMessages.$.status': status,
                    'AllMessages.$.date': date,
                },
            },
        );

        res.status(200).send({ message: "Message saved" });
    } catch (err) {
        console.log(err);
        res.status(422).send(err.message);
    }
});

>Solution :

Try with findOneAndUpdate:

router.post('/markasread', async (req, res) => {
  const { RoomId, RecieverId } = req.body;

  try {
    const updatedUser = await User.findOneAndUpdate(
      { _id: RecieverId, 'AllMessages.RoomId': RoomId },
      {
        'AllMessages.$.status': 'seen',
      },
      { new: true }
    );

    if (!updatedUser) return res.status(400).send('User not found.');

    res.status(200).send('Message marked as seen.');
  } catch (err) {
    console.log(err);
    res.status(500).send('Error marking message as seen.');
  }
});
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading