fix: file uploads api
This commit is contained in:
@@ -5,9 +5,6 @@ const {
|
|||||||
createFileUploadDb,
|
createFileUploadDb,
|
||||||
deleteFileUploadByPathDb,
|
deleteFileUploadByPathDb,
|
||||||
} = require("../db/file_uploads.db");
|
} = require("../db/file_uploads.db");
|
||||||
const {
|
|
||||||
createSolutionDb,
|
|
||||||
} = require("../db/brand.db");
|
|
||||||
|
|
||||||
const uploadFile = async (req, res) => {
|
const uploadFile = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
@@ -23,7 +20,6 @@ const uploadFile = async (req, res) => {
|
|||||||
|
|
||||||
const pathDocument = `${folder}/${file.filename}`;
|
const pathDocument = `${folder}/${file.filename}`;
|
||||||
|
|
||||||
// Insert ke DB via DB layer
|
|
||||||
const fileData = {
|
const fileData = {
|
||||||
file_upload_name: file.originalname,
|
file_upload_name: file.originalname,
|
||||||
path_document: pathDocument,
|
path_document: pathDocument,
|
||||||
@@ -34,7 +30,11 @@ const uploadFile = async (req, res) => {
|
|||||||
await createFileUploadDb(fileData);
|
await createFileUploadDb(fileData);
|
||||||
|
|
||||||
const response = await setResponse(
|
const response = await setResponse(
|
||||||
{ name: file.originalname, path: pathDocument },
|
{
|
||||||
|
file_upload_name: file.originalname,
|
||||||
|
path_document: pathDocument,
|
||||||
|
path_solution: pathDocument
|
||||||
|
},
|
||||||
"File berhasil diunggah"
|
"File berhasil diunggah"
|
||||||
);
|
);
|
||||||
res.status(200).json(response);
|
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 {
|
try {
|
||||||
const { filename } = req.params;
|
const { folder, filename } = req.params;
|
||||||
const filePath = path.join(__dirname, "../uploads", folder, filename);
|
|
||||||
|
// 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)) {
|
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);
|
const response = await setResponse([], "File tidak ditemukan", 404);
|
||||||
return res.status(404).json(response);
|
return res.status(404).json(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
res.sendFile(filePath);
|
res.sendFile(filePath);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.error('getFileByPath Error:', error);
|
||||||
const response = await setResponse([], error.message, 500);
|
const response = await setResponse([], error.message, 500);
|
||||||
res.status(500).json(response);
|
res.status(500).json(response);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const deleteFile = (folder) => async (req, res) => {
|
const deleteFileByPath = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { filename } = req.params;
|
const { folder, filename } = req.params;
|
||||||
const filePath = path.join(__dirname, "../uploads", folder, filename);
|
|
||||||
|
// Decode filename from URL encoding
|
||||||
|
const decodedFilename = decodeURIComponent(filename);
|
||||||
|
const filePath = path.join(__dirname, "../uploads", folder, decodedFilename);
|
||||||
|
|
||||||
if (!fs.existsSync(filePath)) {
|
if (!fs.existsSync(filePath)) {
|
||||||
const response = await setResponse([], "File tidak ditemukan", 404);
|
const response = await setResponse([], "File tidak ditemukan", 404);
|
||||||
@@ -74,8 +101,8 @@ const deleteFile = (folder) => async (req, res) => {
|
|||||||
// Delete physical file
|
// Delete physical file
|
||||||
fs.unlinkSync(filePath);
|
fs.unlinkSync(filePath);
|
||||||
|
|
||||||
const pathDocument = `${folder}/${filename}`;
|
const pathDocument = `${folder}/${decodedFilename}`;
|
||||||
const deletedBy = req.user?.user_id || null;
|
const deletedBy = req.user?.user_id || null;
|
||||||
await deleteFileUploadByPathDb(pathDocument, deletedBy);
|
await deleteFileUploadByPathDb(pathDocument, deletedBy);
|
||||||
|
|
||||||
const response = await setResponse([], "File berhasil dihapus");
|
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 = {
|
module.exports = {
|
||||||
uploadFile,
|
uploadFile,
|
||||||
uploadSolutionFile,
|
getFileByPath,
|
||||||
getFile,
|
deleteFileByPath,
|
||||||
deleteFile,
|
|
||||||
};
|
};
|
||||||
@@ -4,18 +4,14 @@ const verifyToken = require("../middleware/verifyToken");
|
|||||||
const verifyAccess = require("../middleware/verifyAccess");
|
const verifyAccess = require("../middleware/verifyAccess");
|
||||||
const {
|
const {
|
||||||
uploadFile,
|
uploadFile,
|
||||||
getFile,
|
getFileByPath,
|
||||||
deleteFile,
|
deleteFileByPath,
|
||||||
} = require("../controllers/file_uploads.controller");
|
} = require("../controllers/file_uploads.controller");
|
||||||
|
|
||||||
router.post("/", verifyToken.verifyAccessToken, verifyAccess(), upload.single("file"), uploadFile);
|
router.post("/", verifyToken.verifyAccessToken, verifyAccess(), upload.single("file"), uploadFile);
|
||||||
|
|
||||||
router.route("/pdf/:filename")
|
router.route("/:folder/:filename")
|
||||||
.get(verifyToken.verifyAccessToken, getFile("pdf"))
|
.get(verifyToken.verifyAccessToken, getFileByPath)
|
||||||
.delete(verifyToken.verifyAccessToken, verifyAccess(), deleteFile("pdf"));
|
.delete(verifyToken.verifyAccessToken, verifyAccess(), deleteFileByPath);
|
||||||
|
|
||||||
router.route("/images/:filename")
|
|
||||||
.get(verifyToken.verifyAccessToken, getFile("images"))
|
|
||||||
.delete(verifyToken.verifyAccessToken, verifyAccess(), deleteFile("images"));
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
Reference in New Issue
Block a user