fix: file uploads api
This commit is contained in:
@@ -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,
|
||||
};
|
||||
Reference in New Issue
Block a user