karthikeya1212's picture
Upload 7 files
e890ceb verified
// 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;