diff --git a/controllers/file_uploads.controller.js b/controllers/file_uploads.controller.js index d6ce4c0..1c40607 100644 --- a/controllers/file_uploads.controller.js +++ b/controllers/file_uploads.controller.js @@ -5,9 +5,6 @@ const { createFileUploadDb, deleteFileUploadByPathDb, } = require("../db/file_uploads.db"); -const { - createSolutionDb, -} = require("../db/brand.db"); const uploadFile = async (req, res) => { try { @@ -23,7 +20,6 @@ const uploadFile = async (req, res) => { const pathDocument = `${folder}/${file.filename}`; - // Insert ke DB via DB layer const fileData = { file_upload_name: file.originalname, path_document: pathDocument, @@ -34,7 +30,11 @@ const uploadFile = async (req, res) => { await createFileUploadDb(fileData); const response = await setResponse( - { name: file.originalname, path: pathDocument }, + { + file_upload_name: file.originalname, + path_document: pathDocument, + path_solution: pathDocument + }, "File berhasil diunggah" ); res.status(200).json(response); @@ -44,27 +44,54 @@ const uploadFile = async (req, res) => { } }; -const getFile = (folder) => async (req, res) => { + + + +const getFileByPath = async (req, res) => { try { - const { filename } = req.params; - const filePath = path.join(__dirname, "../uploads", folder, filename); + const { folder, filename } = req.params; + + // Decode filename from URL encoding + const decodedFilename = decodeURIComponent(filename); + const filePath = path.join(__dirname, "../uploads", folder, decodedFilename); + + console.log('getFileByPath Debug:', { + folder, + originalFilename: filename, + decodedFilename, + filePath + }); if (!fs.existsSync(filePath)) { + console.log('File not found at path:', filePath); + + // try { + // const folderPath = path.join(__dirname, "../uploads", folder); + // const availableFiles = fs.readdirSync(folderPath); + // console.log('Available files in', folderPath, ':', availableFiles); + // } catch (listError) { + // console.log('Could not list files in folder:', listError.message); + // } + const response = await setResponse([], "File tidak ditemukan", 404); return res.status(404).json(response); } res.sendFile(filePath); } catch (error) { + console.error('getFileByPath Error:', error); const response = await setResponse([], error.message, 500); res.status(500).json(response); } }; -const deleteFile = (folder) => async (req, res) => { +const deleteFileByPath = async (req, res) => { try { - const { filename } = req.params; - const filePath = path.join(__dirname, "../uploads", folder, filename); + const { folder, filename } = req.params; + + // Decode filename from URL encoding + const decodedFilename = decodeURIComponent(filename); + const filePath = path.join(__dirname, "../uploads", folder, decodedFilename); if (!fs.existsSync(filePath)) { const response = await setResponse([], "File tidak ditemukan", 404); @@ -74,8 +101,8 @@ const deleteFile = (folder) => async (req, res) => { // Delete physical file fs.unlinkSync(filePath); - const pathDocument = `${folder}/${filename}`; - const deletedBy = req.user?.user_id || null; + const pathDocument = `${folder}/${decodedFilename}`; + const deletedBy = req.user?.user_id || null; await deleteFileUploadByPathDb(pathDocument, deletedBy); const response = await setResponse([], "File berhasil dihapus"); @@ -86,66 +113,8 @@ const deleteFile = (folder) => async (req, res) => { } }; -const uploadSolutionFile = async (req, res) => { - try { - if (!req.file) { - const response = await setResponse([], "Tidak ada file yang diunggah", 400); - return res.status(400).json(response); - } - - const { error_code_id, solution_name } = req.body; - - if (!error_code_id || !solution_name) { - const response = await setResponse([], "error_code_id dan solution_name harus diisi", 400); - return res.status(400).json(response); - } - - const file = req.file; - const ext = path.extname(file.originalname).toLowerCase(); - const typeDoc = ext === ".pdf" ? "PDF" : "IMAGE"; - const folder = typeDoc === "PDF" ? "pdf" : "images"; - const pathDocument = `${folder}/${file.filename}`; - - const fileData = { - file_upload_name: file.originalname, - path_document: pathDocument, - type_document: typeDoc, - createdBy: req.user?.user_id || null, - }; - - await createFileUploadDb(fileData); - - const solutionData = { - solution_name: solution_name, - type_solution: typeDoc.toLowerCase(), - path_solution: pathDocument, - is_active: true, - created_by: req.user?.user_id || null - }; - - const solutionId = await createSolutionDb(error_code_id, solutionData); - - const response = await setResponse( - { - solution_id: solutionId, - solution_name: solution_name, - error_code_id: error_code_id, - file_name: file.originalname, - file_path: pathDocument, - file_type: typeDoc.toLowerCase() - }, - "Solution file berhasil diunggah" - ); - res.status(200).json(response); - } catch (error) { - const response = await setResponse([], error.message, 500); - res.status(500).json(response); - } -}; - module.exports = { uploadFile, - uploadSolutionFile, - getFile, - deleteFile, + getFileByPath, + deleteFileByPath, }; \ No newline at end of file diff --git a/routes/file_uploads.route.js b/routes/file_uploads.route.js index 53f4fbc..1a35fe5 100644 --- a/routes/file_uploads.route.js +++ b/routes/file_uploads.route.js @@ -4,18 +4,14 @@ const verifyToken = require("../middleware/verifyToken"); const verifyAccess = require("../middleware/verifyAccess"); const { uploadFile, - getFile, - deleteFile, + getFileByPath, + deleteFileByPath, } = require("../controllers/file_uploads.controller"); router.post("/", verifyToken.verifyAccessToken, verifyAccess(), upload.single("file"), uploadFile); -router.route("/pdf/:filename") - .get(verifyToken.verifyAccessToken, getFile("pdf")) - .delete(verifyToken.verifyAccessToken, verifyAccess(), deleteFile("pdf")); - -router.route("/images/:filename") - .get(verifyToken.verifyAccessToken, getFile("images")) - .delete(verifyToken.verifyAccessToken, verifyAccess(), deleteFile("images")); +router.route("/:folder/:filename") + .get(verifyToken.verifyAccessToken, getFileByPath) + .delete(verifyToken.verifyAccessToken, verifyAccess(), deleteFileByPath); module.exports = router; \ No newline at end of file