const express = require('express'); const multer = require('multer'); const upload = multer(); const router = express.Router(); const uploadService = require('../services/uploadService'); const { getActiveUser, authMiddleware } = require('../middleware/auth'); const { validateFile } = require('../validators/upload.validator'); const { toFileDto, fileCreationErrorDto, fileCreationResultDto } = require('../dtos/file.dto'); router.post('/', authMiddleware, upload.single('file'), async (req, res) => { const validation = validateFile(req.file); if (!validation.valid) { return res.status(400).json(fileCreationErrorDto(validation.reason)); } const user = await getActiveUser(req); const result = await uploadService.createUpload(user, req.file); if (!result) { return res.status(500).json(fileCreationErrorDto('Error processing upload')); } res.status(200).json(fileCreationResultDto(result.filename)); }); router.get('/', authMiddleware, async (req, res) => { const user = await getActiveUser(req); const uploads = await uploadService.getUserUploads(user); res.json(uploads.map(toFileDto)); }); router.delete('/:filename', authMiddleware, async (req, res) => { const user = await getActiveUser(req); const { filename } = req.params; try { await uploadService.deleteUpload(user, filename); res.sendStatus(200); } catch (err) { console.error(err); res.status(500).send('Error deleting upload'); } }); router.put('/:filename', authMiddleware, async (req, res) => { const user = await getActiveUser(req); const { filename } = req.params; const { newFilename } = req.body; if (!newFilename || typeof newFilename !== 'string') { return res.status(400).json({ message: 'New filename is required and must be a string' }); } try { const success = await uploadService.renameUpload(user, filename, newFilename); if (!success) { return res.status(404).json({ message: 'File not found or not authorized' }); } res.status(200).json({ message: 'File renamed successfully' }); } catch (err) { console.error('Error renaming file:', err); res.status(500).json({ message: 'Internal server error' }); } }); module.exports = router;