Delete message

This commit is contained in:
Brad Traversy
2024-07-15 11:09:27 -04:00
parent bfbcca7c63
commit a51dbc3276
2 changed files with 50 additions and 2 deletions
+34
View File
@@ -0,0 +1,34 @@
'use server';
import connectDB from '@/config/database';
import Message from '@/models/Message';
import { getSessionUser } from '@/utils/getSessionUser';
import { revalidatePath } from 'next/cache';
async function deleteMessage(messageId) {
await connectDB();
const sessionUser = await getSessionUser();
if (!sessionUser || !sessionUser.user) {
throw new Error('User ID is required');
}
const { userId } = sessionUser;
const message = await Message.findById(messageId);
if (!message) throw new Error('Message Not Found');
// Verify ownership
if (message.recipient.toString() !== userId) {
throw new Error('Unauthorized');
}
// revalidate cache
revalidatePath('/messages', 'page');
await message.deleteOne();
}
export default deleteMessage;
+16 -2
View File
@@ -2,17 +2,28 @@
import { useState } from 'react'; import { useState } from 'react';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import markMessageAsRead from '@/app/actions/markMessageAsRead'; import markMessageAsRead from '@/app/actions/markMessageAsRead';
import deleteMessage from '@/app/actions/deleteMessage';
const MessageCard = ({ message }) => { const MessageCard = ({ message }) => {
const [isRead, setIsRead] = useState(message.read); const [isRead, setIsRead] = useState(message.read);
const [isDeleted, setIsDeleted] = useState(false);
const handleReadClick = async () => { const handleReadClick = async () => {
const read = await markMessageAsRead(message._id); const read = await markMessageAsRead(message._id);
setIsRead(read); setIsRead(read);
toast.success(`Marked as ${read ? 'read' : 'new'}`); toast.success(`Marked as ${read ? 'read' : 'new'}`);
}; };
const handleDeleteClick = async () => {
await deleteMessage(message._id);
setIsDeleted(true);
toast.success('Message Deleted');
};
if (isDeleted) {
return <p>Deleted message</p>;
}
return ( return (
<div className='relative bg-white p-4 rounded-md shadow-md border border-gray-200'> <div className='relative bg-white p-4 rounded-md shadow-md border border-gray-200'>
{!isRead && ( {!isRead && (
@@ -52,7 +63,10 @@ const MessageCard = ({ message }) => {
> >
{isRead ? 'Mark As New' : 'Mark As Read'} {isRead ? 'Mark As New' : 'Mark As Read'}
</button> </button>
<button className='mt-4 bg-red-500 text-white py-1 px-3 rounded-md'> <button
onClick={handleDeleteClick}
className='mt-4 bg-red-500 text-white py-1 px-3 rounded-md'
>
Delete Delete
</button> </button>
</div> </div>