Files
2026-08-23 09:04:47 +00:00

53 lines
1.8 KiB
JavaScript

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;