import express from 'express'; import multer from 'multer'; import { auth } from '../../middleware/auth'; import { s3Service } from '../../services/s3Service.js'; import { logger } from '../../config/logger.js'; import { imageResolutions } from '../../../src/config/imageResolutions.js'; const router = express.Router(); const upload = multer(); router.post('/upload-url', auth, async (req, res) => { try { const { fileName, fileType, resolution } = req.body; const selectedResolution = imageResolutions.find(r => r.id === resolution); if (!selectedResolution) { throw new Error('Invalid resolution'); } const { uploadUrl, imageId, key } = await s3Service.getUploadUrl(fileName, fileType); logger.info(`Generated upload URL for image: ${fileName}`); res.json({ uploadUrl, imageId, key }); } catch (error) { logger.error('Error generating upload URL:', error); res.status(500).json({ error: 'Failed to generate upload URL' }); } }); router.post('/process', auth, upload.single('image'), async (req, res) => { try { const { file } = req; const { resolution } = req.body; if (!file) { throw new Error('No file uploaded'); } const selectedResolution = imageResolutions.find(r => r.id === resolution); if (!selectedResolution) { throw new Error('Invalid resolution'); } const result = await s3Service.optimizeAndUpload( file.buffer, file.originalname, selectedResolution ); logger.info(`Successfully processed image: ${file.originalname}`); res.json(result); } catch (error) { logger.error('Error processing image:', error); res.status(500).json({ error: 'Failed to process image' }); } }); export default router;