soft delete code added

This commit is contained in:
Mansi1916
2025-07-12 12:50:43 +05:30
parent dd2ceadee5
commit 7305fc1311
5 changed files with 77 additions and 11 deletions

View File

@@ -2,7 +2,7 @@ const Meeting = require("../models/Meeting");
exports.getMeetings = async (req, res) => { exports.getMeetings = async (req, res) => {
try { try {
const meetings = await Meeting.find(); const meetings = await Meeting.find({ isDelete : false });
const formattedMeetings = meetings.map((meeting) => { const formattedMeetings = meetings.map((meeting) => {
const formattedAgenda = meeting.agenda const formattedAgenda = meeting.agenda
? meeting.agenda.map((item, index) => `<li>${index + 1}. ${item}</li>`).join("") ? meeting.agenda.map((item, index) => `<li>${index + 1}. ${item}</li>`).join("")
@@ -16,3 +16,20 @@ exports.getMeetings = async (req, res) => {
res.status(500).json({ error: "Error fetching meetings" }); res.status(500).json({ error: "Error fetching meetings" });
} }
}; };
// ✅ Soft delete controller (NEW)
exports.softDeleteMeeting = async (req, res) => {
try {
const { id } = req.params;
const meeting = await Meeting.findByIdAndUpdate(id, { isDeleted: true }, { new: true });
if (!meeting) {
return res.status(404).json({ error: "Meeting not found" });
}
res.json({ message: "Meeting soft deleted successfully", meeting });
} catch (error) {
console.error("Error soft deleting meeting:", error);
res.status(500).json({ error: "Failed to soft delete meeting" });
}
};

View File

@@ -11,6 +11,10 @@ const meetingSchema = new mongoose.Schema({
endTime: String, endTime: String,
recipients: [String], recipients: [String],
attachments: [{ filename: String, path: String }], attachments: [{ filename: String, path: String }],
isDeleted: {
type: Boolean,
default: false
}
}); });
module.exports = mongoose.model("Meeting", meetingSchema); module.exports = mongoose.model("Meeting", meetingSchema);

View File

@@ -1,8 +1,16 @@
const express = require("express"); const express = require("express");
const { getMeetings } = require("../controllers/meetingController"); const {
getMeetings,
softDeleteMeeting // ✅ Add this line
} = require("../controllers/meetingController");
const router = express.Router(); const router = express.Router();
// GET all non-deleted meetings
router.get("/meetings", getMeetings); router.get("/meetings", getMeetings);
// ✅ Add soft delete route
router.patch("/meetings/:id/soft-delete", softDeleteMeeting);
module.exports = router; module.exports = router;

View File

@@ -122,6 +122,21 @@ html, body {
padding: 10px; padding: 10px;
} }
.soft-delete-button {
background-color: #d9534f;
color: white;
padding: 8px 14px;
border: none;
border-radius: 4px;
cursor: pointer;
margin-top: 10px;
}
.soft-delete-button:hover {
background-color: #c9302c;
}
/* Meeting Cards */ /* Meeting Cards */
.meeting-card { .meeting-card {
background-color: var(--white); background-color: var(--white);

View File

@@ -12,10 +12,9 @@ const Page5 = () => {
const [meetings, setMeetings] = useState([]); const [meetings, setMeetings] = useState([]);
const [expandedIndex, setExpandedIndex] = useState(null); const [expandedIndex, setExpandedIndex] = useState(null);
useEffect(() => { const fetchMeetings = () => {
axios.get('http://localhost:5000/api/meetings') axios.get('http://localhost:5000/api/meetings')
.then((response) => { .then((response) => {
// Sort meetings by date (newest first) and time
const sortedMeetings = response.data.sort((a, b) => { const sortedMeetings = response.data.sort((a, b) => {
const dateA = new Date(`${a.date}T${a.startTime}`); const dateA = new Date(`${a.date}T${a.startTime}`);
const dateB = new Date(`${b.date}T${b.startTime}`); const dateB = new Date(`${b.date}T${b.startTime}`);
@@ -26,22 +25,35 @@ const Page5 = () => {
.catch((error) => { .catch((error) => {
console.error('Error fetching meetings:', error); console.error('Error fetching meetings:', error);
}); });
};
useEffect(() => {
fetchMeetings();
}, []); }, []);
const toggleExpand = (index) => { const toggleExpand = (index) => {
setExpandedIndex(prev => (prev === index ? null : index)); setExpandedIndex(prev => (prev === index ? null : index));
}; };
const handleSoftDelete = async (id) => {
try {
await axios.patch(`http://localhost:5000/api/meetings/${id}/soft-delete`);
alert('Meeting soft deleted!');
fetchMeetings();
} catch (error) {
console.error('Error deleting meeting:', error);
alert('Soft delete failed.');
}
};
return ( return (
<div className="page-container"> <div className="page-container">
{/* Header Bar */}
<header className="header-bar"> <header className="header-bar">
<img src={image} alt="Left Logo" className="leftlogo" /> <img src={image} alt="Left Logo" className="leftlogo" />
<h1 className="college-name">Somaiya Scheduler</h1> <h1 className="college-name">Somaiya Scheduler</h1>
<img src={somaiyatrust} alt="Right Logo" className="rightlogo" /> <img src={somaiyatrust} alt="Right Logo" className="rightlogo" />
</header> </header>
{/* Navigation Bar */}
<nav className="navbar"> <nav className="navbar">
<ul> <ul>
<li><Link to="/page2">Home</Link></li> <li><Link to="/page2">Home</Link></li>
@@ -53,7 +65,6 @@ const Page5 = () => {
</ul> </ul>
</nav> </nav>
{/* Main Content */}
<div className="meetings-page-container"> <div className="meetings-page-container">
<h1 className="page-title">Meeting Details</h1> <h1 className="page-title">Meeting Details</h1>
@@ -141,6 +152,18 @@ const Page5 = () => {
> >
Add to Google Calendar Add to Google Calendar
</a> </a>
{/* ✅ Soft Delete Button */}
<button
onClick={(e) => {
e.stopPropagation();
handleSoftDelete(meeting._id);
}}
className="soft-delete-button"
>
Delete Meeting
</button>
</div> </div>
)} )}
</div> </div>
@@ -150,7 +173,6 @@ const Page5 = () => {
)} )}
</div> </div>
{/* Footer */}
<footer> <footer>
<div className="terms"> <div className="terms">
<a href="#">Terms and Policies</a> <a href="#">Terms and Policies</a>