58 lines
1.7 KiB
TypeScript

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;