// uploadRoute.js const express = require("express"); const upload = require("../middlewares/upload"); // Import the Multer middleware const pool = require("../config/db"); const path = require("path"); const fs = require("fs-extra"); const ffmpeg = require("fluent-ffmpeg"); const router = express.Router(); // Ensure the uploads and optimized directories exist const uploadDir = path.join(__dirname, "../uploads"); const optimizedDir = path.join(__dirname, "../optimized"); fs.ensureDirSync(uploadDir); fs.ensureDirSync(optimizedDir); async function optimizeVideo(inputPath, outputPath) { return new Promise((resolve, reject) => { ffmpeg(inputPath) .videoCodec("libx264") .audioCodec("aac") .format("mp4") .outputOptions([ "-movflags frag_keyframe+empty_moov", "-preset medium", "-crf 23", "-maxrate 2M", "-bufsize 4M", ]) .on("end", () => { console.log("Video optimization completed."); resolve(); }) .on("error", (err) => { console.error("Error optimizing video:", err); reject(err); }) .save(outputPath); }); } // Upload file API router.post("/upload", upload.single("file"), async (req, res) => { try { const { client_id, file_name } = req.body; if (!req.file) { return res.status(400).json({ error: "No file uploaded" }); } const inputPath = path.join(uploadDir, req.file.filename); const outputPath = path.join(optimizedDir, "optimized_" + req.file.filename); const dbFilePath = `optimized/optimized_${req.file.filename}`; if (req.file.mimetype.startsWith("video/")) { try { await optimizeVideo(inputPath, outputPath); await pool.query( "INSERT INTO tbl_files (transid, client_id, file_name, file_path) VALUES (UUID(), ?, ?, ?)", [client_id, file_name, dbFilePath] ); res.json({ message: "File uploaded and optimized successfully!", file_path: dbFilePath }); } catch (optimizeError) { console.error("Optimization error:", optimizeError); await pool.query( "INSERT INTO tbl_files (transid, client_id, file_name, file_path) VALUES (UUID(), ?, ?, ?)", [client_id, file_name, `uploads/${req.file.filename}`] ); res.status(500).json({ message: "File uploaded, but optimization failed.", file_path: `uploads/${req.file.filename}` }); } } else { await pool.query( "INSERT INTO tbl_files (transid, client_id, file_name, file_path) VALUES (UUID(), ?, ?, ?)", [client_id, file_name, `uploads/${req.file.filename}`] ); res.json({ message: "File uploaded successfully!", file_path: `uploads/${req.file.filename}` }); } } catch (err) { console.error("General upload error:", err); res.status(500).json({ error: err.message }); } }); router.delete("/del/:fileid", async (req, res) => { try { const { fileid } = req.params; const [files] = await pool.query("delete from tbl_files where transid =? ", [fileid]); const [filesfromads] = await pool.query("delete from tbl_client_partner_mapping where fileid =? ", [fileid]); res.json(files); } catch (err) { res.status(500).json({ error: err.message }); } }); module.exports = router;