File size: 4,657 Bytes
e890ceb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// 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;