67 lines
2.2 KiB
JavaScript
67 lines
2.2 KiB
JavaScript
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;
|