151 lines
4.3 KiB
JavaScript
151 lines
4.3 KiB
JavaScript
const path = require("path");
|
|
const fs = require("fs");
|
|
const { setResponse } = require("../helpers/utils");
|
|
const {
|
|
createFileUploadDb,
|
|
deleteFileUploadByPathDb,
|
|
} = require("../db/file_uploads.db");
|
|
const {
|
|
createSolutionDb,
|
|
} = require("../db/brand.db");
|
|
|
|
const uploadFile = async (req, res) => {
|
|
try {
|
|
if (!req.file) {
|
|
const response = await setResponse([], "Tidak ada file yang diunggah", 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}`;
|
|
|
|
// Insert ke DB via DB layer
|
|
const fileData = {
|
|
file_upload_name: file.originalname,
|
|
path_document: pathDocument,
|
|
type_document: typeDoc,
|
|
createdBy: req.user?.user_id || null,
|
|
};
|
|
|
|
await createFileUploadDb(fileData);
|
|
|
|
const response = await setResponse(
|
|
{ name: file.originalname, path: pathDocument },
|
|
"File berhasil diunggah"
|
|
);
|
|
res.status(200).json(response);
|
|
} catch (error) {
|
|
const response = await setResponse([], error.message, 500);
|
|
res.status(500).json(response);
|
|
}
|
|
};
|
|
|
|
const getFile = (folder) => async (req, res) => {
|
|
try {
|
|
const { filename } = req.params;
|
|
const filePath = path.join(__dirname, "../uploads", folder, filename);
|
|
|
|
if (!fs.existsSync(filePath)) {
|
|
const response = await setResponse([], "File tidak ditemukan", 404);
|
|
return res.status(404).json(response);
|
|
}
|
|
|
|
res.sendFile(filePath);
|
|
} catch (error) {
|
|
const response = await setResponse([], error.message, 500);
|
|
res.status(500).json(response);
|
|
}
|
|
};
|
|
|
|
const deleteFile = (folder) => async (req, res) => {
|
|
try {
|
|
const { filename } = req.params;
|
|
const filePath = path.join(__dirname, "../uploads", folder, filename);
|
|
|
|
if (!fs.existsSync(filePath)) {
|
|
const response = await setResponse([], "File tidak ditemukan", 404);
|
|
return res.status(404).json(response);
|
|
}
|
|
|
|
// Delete physical file
|
|
fs.unlinkSync(filePath);
|
|
|
|
const pathDocument = `${folder}/${filename}`;
|
|
const deletedBy = req.user?.user_id || null;
|
|
await deleteFileUploadByPathDb(pathDocument, deletedBy);
|
|
|
|
const response = await setResponse([], "File berhasil dihapus");
|
|
res.status(200).json(response);
|
|
} catch (error) {
|
|
const response = await setResponse([], error.message, 500);
|
|
res.status(500).json(response);
|
|
}
|
|
};
|
|
|
|
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,
|
|
}; |