diff --git a/backend/controllers/meetingController.js b/backend/controllers/meetingController.js index 1b47f07..9309179 100644 --- a/backend/controllers/meetingController.js +++ b/backend/controllers/meetingController.js @@ -2,7 +2,7 @@ const Meeting = require("../models/Meeting"); exports.getMeetings = async (req, res) => { try { - const meetings = await Meeting.find(); + const meetings = await Meeting.find({ isDelete : false }); const formattedMeetings = meetings.map((meeting) => { const formattedAgenda = meeting.agenda ? meeting.agenda.map((item, index) => `
  • ${index + 1}. ${item}
  • `).join("") @@ -16,3 +16,20 @@ exports.getMeetings = async (req, res) => { 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" }); + } +}; diff --git a/backend/models/Meeting.js b/backend/models/Meeting.js index 8502761..f6cd690 100644 --- a/backend/models/Meeting.js +++ b/backend/models/Meeting.js @@ -11,6 +11,10 @@ const meetingSchema = new mongoose.Schema({ endTime: String, recipients: [String], attachments: [{ filename: String, path: String }], + isDeleted: { + type: Boolean, + default: false + } }); module.exports = mongoose.model("Meeting", meetingSchema); diff --git a/backend/routes/meetingRoutes.js b/backend/routes/meetingRoutes.js index b52bd1d..9f0e1f4 100644 --- a/backend/routes/meetingRoutes.js +++ b/backend/routes/meetingRoutes.js @@ -1,8 +1,16 @@ const express = require("express"); -const { getMeetings } = require("../controllers/meetingController"); +const { + getMeetings, + softDeleteMeeting // ✅ Add this line +} = require("../controllers/meetingController"); const router = express.Router(); +// GET all non-deleted meetings router.get("/meetings", getMeetings); +// ✅ Add soft delete route +router.patch("/meetings/:id/soft-delete", softDeleteMeeting); + module.exports = router; + diff --git a/frontend/src/Page5.css b/frontend/src/Page5.css index c157270..535f61d 100644 --- a/frontend/src/Page5.css +++ b/frontend/src/Page5.css @@ -122,6 +122,21 @@ html, body { 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-card { background-color: var(--white); diff --git a/frontend/src/Page5.js b/frontend/src/Page5.js index 3b757ec..6cd6f6f 100644 --- a/frontend/src/Page5.js +++ b/frontend/src/Page5.js @@ -1,4 +1,4 @@ -//Page5.js +// Page5.js import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; @@ -12,10 +12,9 @@ const Page5 = () => { const [meetings, setMeetings] = useState([]); const [expandedIndex, setExpandedIndex] = useState(null); - useEffect(() => { + const fetchMeetings = () => { axios.get('http://localhost:5000/api/meetings') .then((response) => { - // Sort meetings by date (newest first) and time const sortedMeetings = response.data.sort((a, b) => { const dateA = new Date(`${a.date}T${a.startTime}`); const dateB = new Date(`${b.date}T${b.startTime}`); @@ -26,22 +25,35 @@ const Page5 = () => { .catch((error) => { console.error('Error fetching meetings:', error); }); + }; + + useEffect(() => { + fetchMeetings(); }, []); const toggleExpand = (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 (
    - {/* Header Bar */}
    Left Logo

    Somaiya Scheduler

    Right Logo
    - {/* Navigation Bar */} - {/* Main Content */}

    Meeting Details

    - + {meetings.length === 0 ? (

    No meetings available

    ) : ( @@ -141,6 +152,18 @@ const Page5 = () => { > Add to Google Calendar + + {/* ✅ Soft Delete Button */} + +
    )}
    @@ -150,7 +173,6 @@ const Page5 = () => { )} - {/* Footer */}