Files
backend-Eprocurement/adapter/sapaccountadapter.js
Rizki e139924302 upd
2026-01-09 10:50:08 +07:00

380 lines
9.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const db = require("../config/dbproc.js");
const Adapter = require("./dbadapter.js");
const request = require("request");
class SAPAccountAdapter extends Adapter {
constructor() {
super();
}
/* ================= LIST + PAGINATION ================= */
async queryList(req, callback) {
var apires = this.getApiResultDefined();
try {
let limit = parseInt(req.query.limit) || 10;
let offset = parseInt(req.query.offset) || 0;
let keyword = req.query.keyword || "";
/* ===== QUERY TOTAL ROW ===== */
let qry = `
SELECT *
FROM tbl_sap_connections
WHERE deleted_at IS NULL
AND (
host LIKE '%${keyword}%'
OR sap_user LIKE '%${keyword}%'
OR ket_sap LIKE '%${keyword}%'
)
`;
db.query(qry, [], function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
if (result.length > 0) {
let pagination = result.length / limit;
if (!Number.isInteger(pagination)) {
pagination = Math.floor(result.length / limit) + 1;
}
apires.success = true;
apires.data.push({
totalpage: pagination,
totalrows: result.length,
});
/* ===== QUERY DATA WITH LIMIT ===== */
let qryData = `
SELECT *
FROM tbl_sap_connections
WHERE deleted_at IS NULL
AND (
host LIKE '%${keyword}%'
OR sap_user LIKE '%${keyword}%'
OR ket_sap LIKE '%${keyword}%'
)
ORDER BY id ASC
LIMIT ${offset}, ${limit}
`;
db.query(qryData, [], function (err, resultData) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.data.push({
results: JSON.parse(JSON.stringify(resultData)),
});
callback(null, apires);
}
});
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= CREATE ================= */
async queryCreate(req, callback) {
var apires = this.getApiResultDefined();
try {
const {sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi} =
req.body;
let qry = `
INSERT INTO tbl_sap_connections
(sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi, created_at, created_by, status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, 'Not_Active')
`;
db.query(
qry,
[
sap_id,
host,
sysnr,
client,
codepage,
ket_sap,
sap_user,
sap_password,
aktivasi,
req.body.nik || "system",
],
function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.success = true;
apires.data = {insertId: result.insertId};
callback(null, apires);
}
},
);
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= UPDATE ================= */
async queryUpdate(req, callback) {
var apires = this.getApiResultDefined();
try {
const id = req.params.id;
const {sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi} = req.body;
let qry = `
UPDATE tbl_sap_connections
SET sap_id = ?, host = ?, sysnr = ?, client = ?, codepage = ?, ket_sap = ?,
sap_user = ?, sap_password = ?, aktivasi = ?,
updated_at = NOW(), updated_by = ?
WHERE id = ? AND deleted_at IS NULL
`;
db.query(
qry,
[
sap_id,
host,
sysnr,
client,
codepage,
ket_sap,
sap_user,
sap_password,
aktivasi,
req.body.nik || "system",
id,
],
function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.success = true;
apires.data = {affectedRows: result.affectedRows};
callback(null, apires);
}
},
);
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= DELETE (SOFT) ================= */
async queryDelete(req, callback) {
var apires = this.getApiResultDefined();
try {
const id = req.params.id;
let qry = `
UPDATE tbl_sap_connections
SET deleted_at = NOW(), deleted_by = ?
WHERE id = ? AND deleted_at IS NULL
`;
db.query(qry, [req.body.nik || "system", id], function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.success = true;
apires.data = {affectedRows: result.affectedRows};
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= DETAIL ================= */
async queryDetail(req, callback) {
var apires = this.getApiResultDefined();
try {
const id = req.params.id;
let qry = `
SELECT *
FROM tbl_sap_connections
WHERE id = ?
AND deleted_at IS NULL
LIMIT 1
`;
db.query(qry, [id], function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
if (result.length > 0) {
apires.success = true;
apires.data = result[0];
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
apires.data = null;
}
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
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
headers: {
"x-api-key": process.env.SAP_API_KEY,
},
};
/* 3⃣ Call SAP API */
request(options, (error, response, body) => {
console.log('response', response)
console.log('error', error)
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.nik || "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;