diff --git a/backend/src/index.js b/backend/src/index.js index eb89d90..11d9887 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -7,6 +7,7 @@ const syncRoutes = require('./routes/sync'); const previewRoutes = require('./routes/preview'); const userRoutes = require('./routes/user'); const searchRoutes = require('./routes/search'); +const batchRoutes = require('./routes/batch'); const errorHandler = require('./middleware/errorHandler'); const app = express(); @@ -15,7 +16,6 @@ const PORT = process.env.PORT || 3000; app.use(cors()); app.use(express.json()); -// Routes app.use('/api/auth', authRoutes); app.use('/api/files', fileRoutes); app.use('/api/share', shareRoutes); @@ -23,11 +23,10 @@ app.use('/api/sync', syncRoutes); app.use('/api/preview', previewRoutes); app.use('/api/user', userRoutes); app.use('/api/search', searchRoutes); +app.use('/api/batch', batchRoutes); -// Error handler app.use(errorHandler); -// Health check app.get('/api/health', (req, res) => { res.json({ status: 'ok' }); }); diff --git a/backend/src/routes/batch.js b/backend/src/routes/batch.js new file mode 100644 index 0000000..77c913d --- /dev/null +++ b/backend/src/routes/batch.js @@ -0,0 +1,56 @@ +const express = require('express'); +const db = require('../db'); + +const router = express.Router(); + +// Batch delete files +router.post('/delete', (req, res) => { + const token = req.headers.authorization?.replace('Bearer ', ''); + if (!token) return res.status(401).json({ error: 'No token' }); + + try { + const jwt = require('jsonwebtoken'); + const decoded = jwt.verify(token, process.env.JWT_SECRET || 'clouddisk-secret-key'); + + const { fileIds } = req.body; + + if (!Array.isArray(fileIds) || fileIds.length === 0) { + return res.status(400).json({ error: 'No files specified' }); + } + + const placeholders = fileIds.map(() => '?').join(','); + db.run( + `UPDATE files SET deleted_at = CURRENT_TIMESTAMP WHERE id IN (${placeholders}) AND user_id = ?`, + [...fileIds, decoded.userId] + ).then(() => { + res.json({ success: true, deleted: fileIds.length }); + }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +// Batch move files +router.post('/move', (req, res) => { + const token = req.headers.authorization?.replace('Bearer ', ''); + if (!token) return res.status(401).json({ error: 'No token' }); + + try { + const jwt = require('jsonwebtoken'); + const decoded = jwt.verify(token, process.env.JWT_SECRET || 'clouddisk-secret-key'); + + const { fileIds, targetFolderId } = req.body; + + const placeholders = fileIds.map(() => '?').join(','); + db.run( + `UPDATE files SET parent_id = ?, updated_at = CURRENT_TIMESTAMP WHERE id IN (${placeholders}) AND user_id = ?`, + [targetFolderId, ...fileIds, decoded.userId] + ).then(() => { + res.json({ success: true, moved: fileIds.length }); + }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +module.exports = router;