| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- const batchModel = require('../model/batch.model')
- const pemantauanModel = require('../model/pemantauan.model')
- const logModel = require('../model/log.model')
- const pddiktiService = require('./v2/pddikti.service')
- const moment = require('moment')
- const { UPDATE_SANKSI, CREATE_SANKSI } = require('../utils/constanta')
- const { logInfo, logError } = require('../utils/logger')
- /**
- * Proses semua batch job UPDATE_SANKSI: kirim ke PDDIKTI, hapus batch kalau sukses,
- * biarkan tersimpan (untuk retry) kalau gagal.
- * Dipakai oleh endpoint manual (auto.controller.batchUpdateSanksi) dan worker background.
- */
- exports.processBatchUpdateSanksi = async () => {
- const data = await batchModel.find({ type: UPDATE_SANKSI })
- .populate({ path: 'sanksi', populate: ['laporan'] })
- if (!data.length) return { processed: 0, error: [] }
- const error = []
- await Promise.all(data.map(async (e) => {
- const { sanksi } = e
- if (!sanksi?.laporan) return
- try {
- await pddiktiService.updatePDDIKTI({
- ptKode: sanksi.laporan.pt.kode,
- noSanksi: sanksi.laporan.no_laporan,
- fromDate: moment(sanksi.masa_berlaku.from_date).format('YYYY-MM-DD'),
- levelSanksi: sanksi.levelSanksi,
- terimaSanksi: moment(sanksi.tanggal_terima_sanksi).format('YYYY-MM-DD')
- })
- await logModel.create({
- aktivitas: `Server berhasil mengirimkan data Ke API PDDIKTI untuk update Status PT ${sanksi.laporan.pt.nama}`
- })
- await batchModel.deleteOne({ _id: e._id })
- logInfo('BATCH_SANKSI', 'Batch item processed', { batchId: e._id, pt: sanksi.laporan.pt.nama })
- } catch (err) {
- error.push(err.message)
- logError('BATCH_SANKSI', 'Batch item failed', { batchId: e._id, pt: sanksi.laporan?.pt?.nama, error: err.message })
- await Promise.all([
- logModel.create({
- aktivitas: `Server gagal mengirimkan data Ke API PDDIKTI untuk update Status PT ${sanksi.laporan.pt.nama}, dengan error ${err.message}`
- }),
- pemantauanModel.deleteOne({
- laporan: sanksi.laporan._id,
- sanksi: sanksi._id,
- action: CREATE_SANKSI
- })
- ])
- }
- }))
- return { processed: data.length, error }
- }
|