fix: file uploads api

This commit is contained in:
2025-10-26 18:26:58 +07:00
parent a3b7f79546
commit cd77fda212
2 changed files with 47 additions and 82 deletions

View File

@@ -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,7 +101,7 @@ const deleteFile = (folder) => async (req, res) => {
// Delete physical file
fs.unlinkSync(filePath);
const pathDocument = `${folder}/${filename}`;
const pathDocument = `${folder}/${decodedFilename}`;
const deletedBy = req.user?.user_id || null;
await deleteFileUploadByPathDb(pathDocument, deletedBy);
@@ -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,
};

View File

@@ -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;