Files
cod-api/controllers/file_uploads.controller.js
2025-10-24 10:54:26 +07:00

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