// const express = require('express'); // const multer = require('multer'); // const { generateShadow } = require('../core/shadowGenerator'); // const router = express.Router(); // // Store file in memory (not on disk) // const storage = multer.memoryStorage(); // const upload = multer({ storage }); // // POST /api/shadow/generate // router.post('/generate', upload.single('image'), async (req, res) => { // try { // if (!req.file) { // return res.status(400).json({ success: false, error: 'No image uploaded' }); // } // const options = { // type: req.body.type || 'cast', // 'cast' | 'drop' | 'flat' | 'box' // dir: req.body.dir || 'back', // used only for drop/flat/box // blur: parseInt(req.body.blur) || 20, // opacity: parseFloat(req.body.opacity) || 0.4, // lightX: req.body.lightX ? parseInt(req.body.lightX) : null, // lightY: req.body.lightY ? parseInt(req.body.lightY) : null // }; // const buffer = await generateShadow(req.file.buffer, options); // // Send back as image/png directly // res.set('Content-Type', 'image/png'); // res.send(buffer); // } catch (err) { // console.error('❌ Shadow generation error:', err); // res.status(500).json({ success: false, error: 'Shadow generation failed' }); // } // }); // module.exports = router; // const express = require('express'); // const multer = require('multer'); // const { generateShadow } = require('../core/shadowGenerator'); // const router = express.Router(); // // Use memory storage for uploaded file // const storage = multer.memoryStorage(); // const upload = multer({ storage }); // router.post('/generate', upload.single('image'), async (req, res) => { // try { // if (!req.file) { // return res.status(400).json({ success: false, error: 'No image uploaded' }); // } // // Parse options correctly // const options = { // type: req.body.mode || 'cast', // match frontend "mode" // dir: req.body.dir || 'back', // blur: req.body.blur ? parseFloat(req.body.blur) : 20, // ensure number // opacity: req.body.opacity ? parseFloat(req.body.opacity) : 0.35, // lightX: req.body.lightX ? parseFloat(req.body.lightX) : null, // lightY: req.body.lightY ? parseFloat(req.body.lightY) : null // }; // const buffer = await generateShadow(req.file.buffer, options); // res.set('Content-Type', 'image/png'); // res.send(buffer); // } catch (err) { // console.error('❌ Shadow generation error:', err); // res.status(500).json({ success: false, error: 'Shadow generation failed' }); // } // }); // module.exports = router; const express = require('express'); const multer = require('multer'); const { addTask, getTaskStatus, getTaskResult, getQueueLength } = require('../../queue'); const router = express.Router(); const upload = multer({ storage: multer.memoryStorage() }); // ---------------- Submit new shadow task ---------------- router.post('/add-shadow', upload.single('file'), async (req, res) => { try { if (!req.file) { return res.status(400).json({ error: 'No image uploaded' }); } const options = { type: req.body.type || 'cast', dir: req.body.dir || 'back', blur: req.body.blur ? parseFloat(req.body.blur) : 20, opacity: req.body.opacity ? parseFloat(req.body.opacity) : 0.35, lightX: req.body.lightX ? parseFloat(req.body.lightX) : null, lightY: req.body.lightY ? parseFloat(req.body.lightY) : null, }; const taskId = await addTask(req.file.buffer, options); res.json({ task_id: taskId }); } catch (err) { console.error('❌ Error adding shadow task:', err); res.status(500).json({ error: 'Failed to add shadow task' }); } }); // ---------------- Queue status ---------------- router.get('/status', (req, res) => { res.json({ status: 'ok', queue_length: getQueueLength(), }); }); // ---------------- Fetch result ---------------- router.get('/result/:id', (req, res) => { const taskId = req.params.id; const status = getTaskStatus(taskId); if (status === 'pending') return res.sendStatus(202); if (status === 'failed') return res.status(500).json({ error: 'Shadow generation failed' }); const result = getTaskResult(taskId); if (!result) return res.status(404).json({ error: 'Result not found' }); res.set('Content-Type', 'image/png'); res.send(result); }); module.exports = router;