From c00dc40f432c5e2a3872fee9e41a422d6e00328a Mon Sep 17 00:00:00 2001 From: Rizki Date: Thu, 8 Jan 2026 17:20:26 +0700 Subject: [PATCH] update --- adapter/sapaccountadapter.js | 124 ++++++++++++++++++++++++++++++++++- controllers/sap_account.js | 35 +++++++++- routes/sap.js | 2 + 3 files changed, 157 insertions(+), 4 deletions(-) diff --git a/adapter/sapaccountadapter.js b/adapter/sapaccountadapter.js index f4e9741..d4c512a 100644 --- a/adapter/sapaccountadapter.js +++ b/adapter/sapaccountadapter.js @@ -1,12 +1,12 @@ const db = require("../config/dbproc.js"); const Adapter = require("./dbadapter.js"); +const request = require("request"); class SAPAccountAdapter extends Adapter { constructor() { super(); } - /* ================= LIST ================= */ /* ================= LIST + PAGINATION ================= */ async queryList(req, callback) { var apires = this.getApiResultDefined(); @@ -246,6 +246,128 @@ class SAPAccountAdapter extends Adapter { callback("error", apires); } } + + /* ================= ACTIVATE ================= */ + async queryActivate(req, callback) { + var apires = this.getApiResultDefined(); + try { + const id = req.params.id; + + /* 1️⃣ Ambil SAP connection dari DB */ + let qry = ` + SELECT * + FROM tbl_sap_connections + WHERE id = ? + AND deleted_at IS NULL + LIMIT 1 + `; + + db.query(qry, [id], (err, result) => { + if (err || result.length === 0) { + apires.meta.code = 404; + apires.meta.message = "SAP Connection not found"; + return callback("err", apires); + } + + const sap = result[0]; + + /* 2️⃣ Build SAP API URL (host + query) */ + const sapUrl = + process.env.SAP_API_BASE_URL + + "/sapConnection" + + `?user=${sap.sap_user}` + + `&password=${sap.sap_password}` + + `&sysnr=${sap.sysnr}` + + `&client=${sap.client}` + + `&codepage=${sap.codepage}` + + `&ket_sap=${sap.ket_sap}` + + `&host=${encodeURIComponent(sap.host)}`; + + const options = { + method: "POST", + url: sapUrl, + timeout: 10000, // ⏱️ 10 detik + }; + + /* 3️⃣ Call SAP API */ + request(options, (error, response, body) => { + if (error) { + apires.meta.code = 500; + apires.meta.message = error.toString(); + return callback("err", apires); + } + + if (response.statusCode !== 200) { + apires.meta.code = response.statusCode; + apires.meta.message = "SAP API failed"; + apires.data = body; + return callback("err", apires); + } + + /* 4️⃣ Set semua Not_Active */ + db.query("UPDATE tbl_sap_connections SET status='Not_Active'", [], () => { + /* 5️⃣ Set Active untuk ID terpilih */ + db.query( + `UPDATE tbl_sap_connections + SET status='Active', + updated_at=NOW(), + updated_by=? + WHERE id=?`, + [req.body.updatedby || "system", id], + (err2) => { + if (err2) { + apires.meta.code = 500; + apires.meta.message = err2.toString(); + return callback("err", apires); + } + + apires.success = true; + apires.data = { + message: "SAP Connection Activated", + sap_id: sap.sap_id, + }; + callback(null, apires); + }, + ); + }); + }); + }); + } catch (err) { + apires.meta.code = 500; + apires.meta.message = err.toString(); + callback("error", apires); + } + } + + /* ================= CURRENT ================= */ + async queryCurrent(req, callback) { + var apires = this.getApiResultDefined(); + try { + let qry = ` + SELECT * + FROM tbl_sap_connections + WHERE status='Active' + AND deleted_at IS NULL + LIMIT 1 + `; + + db.query(qry, [], function (err, result) { + if (err) { + apires.meta.code = 500; + apires.meta.message = err.toString(); + callback("err", apires); + } else { + apires.success = true; + apires.data = result.length > 0 ? result[0] : null; + callback(null, apires); + } + }); + } catch (err) { + apires.meta.code = 500; + apires.meta.message = err.toString(); + callback("error", apires); + } + } } module.exports = SAPAccountAdapter; diff --git a/controllers/sap_account.js b/controllers/sap_account.js index 8fb8a24..abfb694 100644 --- a/controllers/sap_account.js +++ b/controllers/sap_account.js @@ -74,8 +74,37 @@ exports.detail = (req, res) => { }); } catch (err) { apireshandler.meta.code = 502; - apireshandler.meta.message = - " [24] : SAP Account detail, " + err.toString(); + apireshandler.meta.message = " [24] : SAP Account detail, " + err.toString(); sapaccountadapter.sendResponse(502, apireshandler, res); } -}; \ No newline at end of file +}; + +/* ================= ACTIVATE SAP ================= */ +exports.activate = (req, res) => { + try { + sapaccountadapter.queryActivate(req, function (err, data) { + let statusCode = data != null ? data.meta.code : 200; + if (err) statusCode = 500; + sapaccountadapter.sendResponse(statusCode, data, res); + }); + } catch (err) { + apireshandler.meta.code = 502; + apireshandler.meta.message = " [25] : SAP Account activate, " + err.toString(); + sapaccountadapter.sendResponse(502, apireshandler, res); + } +}; + +/* ================= CURRENT SAP ================= */ +exports.current = (req, res) => { + try { + sapaccountadapter.queryCurrent(req, function (err, data) { + let statusCode = data != null ? data.meta.code : 200; + if (err) statusCode = 500; + sapaccountadapter.sendResponse(statusCode, data, res); + }); + } catch (err) { + apireshandler.meta.code = 502; + apireshandler.meta.message = " [26] : SAP Account current, " + err.toString(); + sapaccountadapter.sendResponse(502, apireshandler, res); + } +}; diff --git a/routes/sap.js b/routes/sap.js index 1e0ec73..bf46363 100644 --- a/routes/sap.js +++ b/routes/sap.js @@ -8,5 +8,7 @@ router.post("/create", [jwtauth], sapcontroller.create); router.put("/update/:id", [jwtauth], sapcontroller.update); router.delete("/delete/:id", [jwtauth], sapcontroller.delete); router.get("/detail/:id", [jwtauth], sapcontroller.detail); +router.post("/activate/:id", [jwtauth], sapcontroller.activate); +router.get("/current", [jwtauth], sapcontroller.current); module.exports = router;