const { Router } = require('express'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const sharp = require('sharp'); const { list, upload, deletePhoto } = require('../controllers/galleryController'); const { authenticate } = require('../middleware/auth'); const galleryDir = path.join(__dirname, '..', 'gallery'); if (!fs.existsSync(galleryDir)) fs.mkdirSync(galleryDir, { recursive: true }); const storage = multer.diskStorage({ destination: (req, file, cb) => cb(null, galleryDir), filename: (req, file, cb) => cb(null, Date.now() + '-' + file.originalname), }); const uploadMulter = multer({ storage, limits: { fileSize: 20 * 1024 * 1024 } }); const router = Router(); router.get('/', authenticate, list); router.post('/upload', authenticate, uploadMulter.array('photos', 20), upload); router.get('/thumbnail/:date/:filename', async (req, res) => { try { const { date, filename } = req.params; const filePath = path.join(galleryDir, date, filename); if (!fs.existsSync(filePath)) return res.status(404).json({ error: 'Fichier introuvable' }); const ext = path.extname(filename).toLowerCase(); if (!['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) { return res.sendFile(filePath); } const thumbDir = path.join(galleryDir, date, '.thumbnails'); if (!fs.existsSync(thumbDir)) fs.mkdirSync(thumbDir, { recursive: true }); const thumbPath = path.join(thumbDir, filename); if (!fs.existsSync(thumbPath)) { await sharp(filePath) .resize(300, 200, { fit: 'cover', position: 'centre' }) .jpeg({ quality: 70 }) .toFile(thumbPath); } res.sendFile(thumbPath); } catch (err) { console.error(err); res.status(500).json({ error: 'Erreur' }); } }); router.delete('/:date/:filename', authenticate, deletePhoto); module.exports = router;