diff --git a/controllers/imageController.js b/controllers/imageController.js index a0cf442..46d405f 100644 --- a/controllers/imageController.js +++ b/controllers/imageController.js @@ -16,6 +16,7 @@ const storage = multer.diskStorage({ const upload = multer({ storage }); exports.uploadImage = upload.single('image'); +exports.uploadImages = upload.array('images'); exports.getAllPages = async (req, res) => { try { @@ -51,6 +52,51 @@ exports.saveImageDetails = async (req, res) => { } }; +exports.saveImageDetailsBulk = async (req, res) => { + try { + const { baseTitle, description, page, startNumber } = req.body; + const files = req.files || []; + + if (!baseTitle || !String(baseTitle).trim()) { + return res.status(400).json({ error: 'Bitte einen Basis-Titel angeben.' }); + } + if (files.length === 0) { + return res.status(400).json({ error: 'Bitte mindestens ein Bild auswählen.' }); + } + + const pageItem = page ? await Page.findAll({ where: { link: page } }) : []; + const pageId = pageItem && pageItem[0] ? pageItem[0].id : null; + const firstNumber = Number.parseInt(startNumber, 10); + const startAt = Number.isFinite(firstNumber) ? firstNumber : 1; + + const createdImages = []; + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const runningNumber = startAt + i; + const title = `${String(baseTitle).trim()} ${runningNumber}`; + const newImage = await Image.create({ + id: uuidv4(), + filename: file.filename, + title, + description: description || '', + pageId, + }); + createdImages.push(newImage); + } + + // Menübild nur dann setzen, wenn genau ein Bild hochgeladen wurde. + if (page && createdImages.length === 1) { + const imageUrl = `/uploads/${createdImages[0].filename}`; + await MenuItem.update({ image: imageUrl }, { where: { link: page } }); + } + + res.status(201).json(createdImages); + } catch (error) { + console.error('Fehler beim Bulk-Upload der Bilder:', error); + res.status(500).json({ error: 'Fehler beim Bulk-Upload der Bilder' }); + } +}; + exports.getImages = async (req, res) => { try { const images = await Image.findAll({ order: [['title', 'ASC']] }); diff --git a/routes/image.js b/routes/image.js index f0c58e2..dd33009 100644 --- a/routes/image.js +++ b/routes/image.js @@ -1,9 +1,10 @@ const express = require('express'); const router = express.Router(); -const { getAllPages, uploadImage, saveImageDetails, getImages, getImagesByPage, getImageById, getImageByHash, updateImage } = require('../controllers/imageController'); +const { getAllPages, uploadImage, uploadImages, saveImageDetails, saveImageDetailsBulk, getImages, getImagesByPage, getImageById, getImageByHash, updateImage } = require('../controllers/imageController'); const authMiddleware = require('../middleware/authMiddleware') router.post('/', authMiddleware, uploadImage, saveImageDetails); +router.post('/bulk', authMiddleware, uploadImages, saveImageDetailsBulk); router.get('/', authMiddleware, getImages); router.get('/page/:pageId', getImagesByPage); router.put('/hash/:id', getImageByHash); diff --git a/src/content/admin/ImageUpload.vue b/src/content/admin/ImageUpload.vue index c8a7d2f..e879839 100644 --- a/src/content/admin/ImageUpload.vue +++ b/src/content/admin/ImageUpload.vue @@ -1,7 +1,16 @@