first commit
This commit is contained in:
24
app/modules/cstore/controllers/cstore.controller.js
Normal file
24
app/modules/cstore/controllers/cstore.controller.js
Normal file
@@ -0,0 +1,24 @@
|
||||
const cstoreService = require('../services/cstore.service');
|
||||
const responseHelper = require('../../../helpers/response.helper');
|
||||
|
||||
class CStoreController {
|
||||
static async charge(req, res) {
|
||||
try {
|
||||
const { store } = req.params;
|
||||
const payload = req.body;
|
||||
|
||||
if (!payload.order_id || !payload.external_id) {
|
||||
return responseHelper.error(res, "order_id dan external_id wajib diisi", 400);
|
||||
}
|
||||
|
||||
const result = await cstoreService.createTransaction(payload, store.toLowerCase());
|
||||
|
||||
return responseHelper.success(res, `Transaksi ${store.toUpperCase()} berhasil dibuat`, result);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return responseHelper.error(res, error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CStoreController;
|
||||
8
app/modules/cstore/routes/cstore.route.js
Normal file
8
app/modules/cstore/routes/cstore.route.js
Normal file
@@ -0,0 +1,8 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const cstoreController = require('../controllers/cstore.controller');
|
||||
|
||||
|
||||
router.post('/:store', cstoreController.charge);
|
||||
|
||||
module.exports = router;
|
||||
57
app/modules/cstore/services/cstore.service.js
Normal file
57
app/modules/cstore/services/cstore.service.js
Normal file
@@ -0,0 +1,57 @@
|
||||
const midtransCore = require('../../../core/midtrans.service');
|
||||
const paymentLogger = require('../../../helpers/payment_logger.helper');
|
||||
const db = require('../../../../models/migration');
|
||||
|
||||
class CStoreService {
|
||||
async createTransaction(payload, store) {
|
||||
let { order_id, external_id, amount, customer_details } = payload;
|
||||
|
||||
if (!amount) {
|
||||
let order = null;
|
||||
if (order_id) order = await db.Order.findByPk(order_id);
|
||||
if (!order && external_id) order = await db.Order.findOne({ where: { orderID: external_id } });
|
||||
|
||||
if (!order) throw new Error("Amount wajib diisi atau order_id/external_id tidak valid");
|
||||
amount = order.total;
|
||||
payload.amount = amount;
|
||||
}
|
||||
|
||||
const parameter = {
|
||||
payment_type: store,
|
||||
transaction_details: {
|
||||
order_id: external_id,
|
||||
gross_amount: amount
|
||||
},
|
||||
customer_details: customer_details,
|
||||
custom_expiry: {
|
||||
expiry_duration: parseInt(process.env.MIDTRANS_EXPIRY_DURATION || 24),
|
||||
unit: process.env.MIDTRANS_EXPIRY_UNIT || 'hour'
|
||||
}
|
||||
};
|
||||
|
||||
if (store === 'indomaret') {
|
||||
parameter.indomaret = {
|
||||
message: "Pembayaran untuk Invoice " + (external_id || order_id)
|
||||
};
|
||||
}
|
||||
|
||||
if (store === 'alfamart') {
|
||||
parameter.alfamart = {
|
||||
alfamart_free_text_1: "Terima kasih telah berbelanja",
|
||||
alfamart_free_text_2: "Simpan struk Anda"
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await midtransCore.getCoreApi().charge(parameter);
|
||||
|
||||
await paymentLogger.log(response, payload);
|
||||
|
||||
return response;
|
||||
} catch (error) {
|
||||
throw new Error(`Midtrans Error (${store}): ${error.message}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new CStoreService();
|
||||
Reference in New Issue
Block a user