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, };