add multi-currency master CRUD (Phase 2)

- add currencyadapter.js: list (with pagination+keyword), detail, history, create, update (auto-log rate change to tbl_currency_log), delete (soft), convertAmount helper
- add controllers/currency.js and routes/currency.js, auto-mounted at /currency
- update dbproc.js: configurable port via HOSTPORT env variable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Rizki
2026-03-23 20:52:29 +07:00
parent b2c866d793
commit 26d22355fa
4 changed files with 415 additions and 1 deletions

89
controllers/currency.js Normal file
View File

@ -0,0 +1,89 @@
const CurrencyAdapter = require('../adapter/currencyadapter.js');
const currencyadapter = new CurrencyAdapter();
const Controllers = require('./controller.js');
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
exports.getCurrencyList = (req, res) => {
try {
currencyadapter.queryCurrencyList(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
currencyadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = "[getCurrencyList] : Currency controller, " + err.toString();
currencyadapter.sendResponse(502, apireshandler, res);
}
}
exports.getCurrencyDetail = (req, res) => {
try {
currencyadapter.queryCurrencyDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
currencyadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = "[getCurrencyDetail] : Currency controller, " + err.toString();
currencyadapter.sendResponse(502, apireshandler, res);
}
}
exports.getCurrencyHistory = (req, res) => {
try {
currencyadapter.queryCurrencyHistory(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
currencyadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = "[getCurrencyHistory] : Currency controller, " + err.toString();
currencyadapter.sendResponse(502, apireshandler, res);
}
}
exports.createCurrency = (req, res) => {
try {
currencyadapter.queryCreateCurrency(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
currencyadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = "[createCurrency] : Currency controller, " + err.toString();
currencyadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateCurrency = (req, res) => {
try {
currencyadapter.queryUpdateCurrency(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
currencyadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = "[updateCurrency] : Currency controller, " + err.toString();
currencyadapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteCurrency = (req, res) => {
try {
currencyadapter.queryDeleteCurrency(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
currencyadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = "[deleteCurrency] : Currency controller, " + err.toString();
currencyadapter.sendResponse(502, apireshandler, res);
}
}