From c1e8bd76d471bd1da96f6841668488b16e6a98ee Mon Sep 17 00:00:00 2001 From: Brad Traversy Date: Mon, 15 Jul 2024 07:52:53 -0400 Subject: [PATCH] Fetch user messages --- app/messages/page.jsx | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 app/messages/page.jsx diff --git a/app/messages/page.jsx b/app/messages/page.jsx new file mode 100644 index 0000000..49a86af --- /dev/null +++ b/app/messages/page.jsx @@ -0,0 +1,57 @@ +import connectDB from '@/config/database'; +import Message from '@/models/Message'; +import '@/models/Property'; +import { convertToSerializeableObject } from '@/utils/convertToObject'; +import { getSessionUser } from '@/utils/getSessionUser'; + +const MessagePage = async () => { + await connectDB(); + + const sessionUser = await getSessionUser(); + + const { userId } = sessionUser; + + const readMessages = await Message.find({ recipient: userId, read: true }) + .sort({ createdAt: -1 }) // Sort read messages in asc order + .populate('sender', 'username') + .populate('property', 'name') + .lean(); + + const unreadMessages = await Message.find({ + recipient: userId, + read: false, + }) + .sort({ createdAt: -1 }) // Sort read messages in asc order + .populate('sender', 'username') + .populate('property', 'name') + .lean(); + + // Convert to serializable object so we can pass to client component. + const messages = [...unreadMessages, ...readMessages].map((messageDoc) => { + const message = convertToSerializeableObject(messageDoc); + message.sender = convertToSerializeableObject(messageDoc.sender); + message.property = convertToSerializeableObject(messageDoc.property); + return message; + }); + + return ( +
+
+
+

Your Messages

+ +
+ {messages.length === 0 ? ( +

You have no messages

+ ) : ( + messages.map((message) => ( +

{message.name}

+ )) + )} +
+
+
+
+ ); +}; +export default MessagePage;