Shadow-Generator / app /server.js
karthikeya1212's picture
Update app/server.js
d46dbc2 verified
// const express = require('express');
// const multer = require('multer');
// const { addTask, getTaskStatus, getTaskResult } = require('../../queue');
// const router = express.Router();
// const upload = multer();
// // ---------------- Submit new shadow task ----------------
// router.post('/generate', upload.single('image'), async (req, res) => {
// if (!req.file) return res.status(400).json({ error: 'No image uploaded' });
// const options = {
// type: req.body.mode || 'cast',
// dir: req.body.dir || 'back',
// blur: parseInt(req.body.blur) || 20,
// opacity: parseFloat(req.body.opacity) || 0.35,
// lightX: req.body.lightX ? parseFloat(req.body.lightX) : undefined,
// lightY: req.body.lightY ? parseFloat(req.body.lightY) : undefined
// };
// try {
// const taskId = await addTask(req.file.buffer, options);
// res.json({ taskId });
// } catch (err) {
// console.error('Error adding task:', err);
// res.status(500).json({ error: 'Failed to add task' });
// }
// });
// // ---------------- Check task status ----------------
// router.get('/status/:id', (req, res) => {
// const status = getTaskStatus(req.params.id);
// res.json({ status });
// });
// // ---------------- Fetch completed result ----------------
// router.get('/result/:id', (req, res) => {
// const result = getTaskResult(req.params.id);
// if (!result) return res.status(404).json({ error: 'Result not ready' });
// res.set('Content-Type', 'image/png');
// res.send(result);
// });
// module.exports = router;
const express = require('express');
const multer = require('multer');
const {
addTask,
getTaskStatus,
getTaskResult,
getQueueLength
} = require('./queues/taskQueue');
const app = express();
const router = express.Router();
const upload = multer();
console.log('๐Ÿ”น Initializing Shadow Backend...');
// ---------------- CORS Middleware ----------------
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
if (req.method === 'OPTIONS') return res.sendStatus(200);
next();
});
// ---------------- Root route ----------------
app.get('/', (req, res) => res.send('Shadow Backend is running โœ…'));
// ---------------- Submit new shadow task ----------------
router.post('/add-shadow', upload.single('file'), async (req, res) => {
console.log('๐Ÿ”น /add-shadow called');
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 ? parseInt(req.body.blur) : 20,
opacity: req.body.opacity ? parseFloat(req.body.opacity) : 0.35,
lightX: req.body.lightX ? parseFloat(req.body.lightX) : undefined,
lightY: req.body.lightY ? parseFloat(req.body.lightY) : undefined,
};
try {
const taskId = await addTask(req.file.buffer, options);
res.json({ task_id: taskId });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Server busy, try again' });
}
});
// ---------------- Server status ----------------
router.get('/status', (req, res) => {
res.json({ status: 'ok', queue_length: getQueueLength() });
});
// ---------------- Poll for 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);
});
app.use('/api/shadow', router);
// ---------------- Start server ----------------
const PORT = process.env.PORT || 7860;
const HOST = '0.0.0.0';
app.listen(PORT, HOST, () => console.log(`๐Ÿš€ Shadow backend running on ${HOST}:${PORT}`));