Fetch user messages
This commit is contained in:
@@ -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 (
|
||||
<section className='bg-blue-50'>
|
||||
<div className='container m-auto py-24 max-w-6xl'>
|
||||
<div className='bg-white px-6 py-8 mb-4 shadow-md rounded-md border m-4 md:m-0'>
|
||||
<h1 className='text-3xl font-bold mb-4'>Your Messages</h1>
|
||||
|
||||
<div className='space-y-4'>
|
||||
{messages.length === 0 ? (
|
||||
<p>You have no messages</p>
|
||||
) : (
|
||||
messages.map((message) => (
|
||||
<h3 key={message._id}>{message.name}</h3>
|
||||
))
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
export default MessagePage;
|
||||
Reference in New Issue
Block a user