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