From c93eed9d52c74023cc3c3ddec2c83ddc57fe9014 Mon Sep 17 00:00:00 2001 From: dakerboul Date: Thu, 13 Mar 2025 12:13:48 +0100 Subject: [PATCH] =?UTF-8?q?Refactor=20la=20route=20de=20pr=C3=A9visualisat?= =?UTF-8?q?ion=20d'image=20pour=20am=C3=A9liorer=20la=20gestion=20des=20er?= =?UTF-8?q?reurs=20et=20int=C3=A9grer=20le=20redimensionnement=20d'image?= =?UTF-8?q?=20dans=20des=20fonctions=20s=C3=A9par=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/imageRoutes.js | 68 +++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/routes/imageRoutes.js b/routes/imageRoutes.js index a20b422..08f9a70 100644 --- a/routes/imageRoutes.js +++ b/routes/imageRoutes.js @@ -62,45 +62,55 @@ router.get('/images/:measurementId', (req, res) => { }); }); +const getImagePath = async (projectId, orderId) => { + const query = 'SELECT path FROM public.measurements WHERE project_id = $1 AND order_id = $2'; + const result = await db.query(query, [projectId, orderId]); + if (result.rows.length === 0) { + throw new Error('Image not found'); + } + return result.rows[0].path; +}; + +const checkImageExists = (imagePath) => { + return new Promise((resolve, reject) => { + fs.access(imagePath, fs.constants.F_OK, (err) => { + if (err) { + reject(new Error('Image not found')); + } else { + resolve(); + } + }); + }); +}; + +const resizeImage = async (imagePath) => { + const metadata = await sharp(imagePath).metadata(); + const width = Math.floor(metadata.width / 7); + const height = Math.floor(metadata.height / 7); + return sharp(imagePath) + .resize(width, height) + .jpeg({ quality: 65 }) + .toBuffer(); +}; + router.get('/preview/:projectId/:orderId', async (req, res) => { const projectId = req.params.projectId; const orderId = req.params.orderId; - const query = 'SELECT path FROM public.measurements WHERE project_id = $1 AND order_id = $2'; try { - const result = await db.query(query, [projectId, orderId]); - if (result.rows.length === 0) { - return res.status(404).json({ error: 'Image not found' }); - } + const imagePath = await getImagePath(projectId, orderId); + await checkImageExists(imagePath); + const resizedImage = await resizeImage(imagePath); - const imagePath = result.rows[0].path; - - // Vérifier si l'image existe - fs.access(imagePath, fs.constants.F_OK, async (err) => { - if (err) { - console.error('Image not found:', err); - return res.status(404).json({ error: 'Image not found' }); - } - - // Obtenir les dimensions originales de l'image - const metadata = await sharp(imagePath).metadata(); - const width = Math.floor(metadata.width / 7); - const height = Math.floor(metadata.height / 7); - - // Redimensionner l'image à la moitié de ses dimensions d'origine - const resizedImage = await sharp(imagePath) - .resize(width, height) - .jpeg({ quality: 65 }) - .toBuffer(); - - res.set('Content-Type', 'image/jpeg'); - res.send(resizedImage); - }); + res.set('Content-Type', 'image/jpeg'); + res.send(resizedImage); } catch (err) { console.error('Error getting image preview:', err); + if (err.message === 'Image not found') { + return res.status(404).json({ error: 'Image not found' }); + } return res.status(500).json({ error: 'Internal Server Error' }); } }); - module.exports = router;