mizuki-express/controllers/file.controller.js
2025-06-08 17:59:26 +02:00

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;