58 lines
1.7 KiB
TypeScript
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; |