From 92ce64b8074435c93cb10ca8ef1d92deda268346 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 15 Sep 2025 23:46:59 +0200 Subject: [PATCH] =?UTF-8?q?F=C3=BCgt=20die=20Funktion=20zum=20L=C3=B6schen?= =?UTF-8?q?=20von=20vordefinierten=20Aktivit=C3=A4tsbildern=20hinzu.=20Imp?= =?UTF-8?q?lementiert=20die=20Logik=20in=20der=20Datei=20predefinedActivit?= =?UTF-8?q?yImageController.js=20und=20aktualisiert=20die=20Routen=20in=20?= =?UTF-8?q?predefinedActivityRoutes.js.=20Erg=C3=A4nzt=20die=20Benutzerobe?= =?UTF-8?q?rfl=C3=A4che=20in=20PredefinedActivities.vue=20um=20die=20M?= =?UTF-8?q?=C3=B6glichkeit,=20hochgeladene=20Bilder=20anzuzeigen=20und=20z?= =?UTF-8?q?u=20l=C3=B6schen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../predefinedActivityImageController.js | 39 +++++ backend/routes/predefinedActivityRoutes.js | 3 +- frontend/src/views/PredefinedActivities.vue | 137 +++++++++++++++--- 3 files changed, 161 insertions(+), 18 deletions(-) diff --git a/backend/controllers/predefinedActivityImageController.js b/backend/controllers/predefinedActivityImageController.js index 820228c..3a07fce 100644 --- a/backend/controllers/predefinedActivityImageController.js +++ b/backend/controllers/predefinedActivityImageController.js @@ -50,4 +50,43 @@ export const uploadPredefinedActivityImage = async (req, res) => { } }; +export const deletePredefinedActivityImage = async (req, res) => { + try { + const { id, imageId } = req.params; // predefinedActivityId, imageId + const { authcode: userToken } = req.headers; + await checkAccess(userToken); + + const activity = await PredefinedActivity.findByPk(id); + if (!activity) { + return res.status(404).json({ error: 'Predefined activity not found' }); + } + + const image = await PredefinedActivityImage.findOne({ + where: { id: imageId, predefinedActivityId: id } + }); + if (!image) { + return res.status(404).json({ error: 'Image not found' }); + } + + // Datei vom Dateisystem löschen + if (fs.existsSync(image.imagePath)) { + fs.unlinkSync(image.imagePath); + } + + // Datensatz aus der Datenbank löschen + await image.destroy(); + + // Falls das gelöschte Bild der aktuelle imageLink war, diesen zurücksetzen + if (activity.imageLink === `/api/predefined-activities/${id}/image/${imageId}`) { + activity.imageLink = null; + await activity.save(); + } + + res.status(200).json({ message: 'Image deleted successfully' }); + } catch (error) { + console.error('[deletePredefinedActivityImage] - Error:', error); + res.status(500).json({ error: 'Failed to delete image' }); + } +}; + diff --git a/backend/routes/predefinedActivityRoutes.js b/backend/routes/predefinedActivityRoutes.js index 0fbefcd..1c872dd 100644 --- a/backend/routes/predefinedActivityRoutes.js +++ b/backend/routes/predefinedActivityRoutes.js @@ -10,7 +10,7 @@ import { } from '../controllers/predefinedActivityController.js'; import multer from 'multer'; import { authenticate } from '../middleware/authMiddleware.js'; -import { uploadPredefinedActivityImage } from '../controllers/predefinedActivityImageController.js'; +import { uploadPredefinedActivityImage, deletePredefinedActivityImage } from '../controllers/predefinedActivityImageController.js'; import PredefinedActivityImage from '../models/PredefinedActivityImage.js'; import path from 'path'; import fs from 'fs'; @@ -23,6 +23,7 @@ router.get('/', authenticate, getAllPredefinedActivities); router.get('/:id', authenticate, getPredefinedActivityById); router.put('/:id', authenticate, updatePredefinedActivity); router.post('/:id/image', authenticate, upload.single('image'), uploadPredefinedActivityImage); +router.delete('/:id/image/:imageId', authenticate, deletePredefinedActivityImage); router.get('/search/query', authenticate, searchPredefinedActivities); router.post('/merge', authenticate, mergePredefinedActivities); router.post('/deduplicate', authenticate, deduplicatePredefinedActivities); diff --git a/frontend/src/views/PredefinedActivities.vue b/frontend/src/views/PredefinedActivities.vue index 59ad2c5..34a3a5a 100644 --- a/frontend/src/views/PredefinedActivities.vue +++ b/frontend/src/views/PredefinedActivities.vue @@ -54,27 +54,42 @@