Spaces:
Sleeping
Sleeping
| // 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; | |