| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- const sanksiModel = require('../../model/sanksi.model')
- const dokumenModel = require('../../model/dokumen.model')
- const laporanModel = require('../../model/laporan.model')
- const handleError = require('../../utils/v1/handleError')
- const response = require('../../utils/responseHandler')
- const coba = require('../../utils/coba')
- exports.pengajuan = handleError(async (req, res) => {
- const [keberatan, banding] = await Promise.all([
- (() =>
- sanksiModel.find({
- ['pengajuan.keberatan']: { $ne: null, $exists: true },
- is_pengajuan_keberatan: { $eq: null, $exists: false }
- }))(),
- (() =>
- sanksiModel.find({
- ['jawaban.keberatan']: { $ne: null, $exists: true },
- ['pengajuan.banding']: { $ne: null, $exists: true },
- is_pengajuan_banding: { $eq: null, $exists: false }
- }))()
- ])
- await Promise.all([
- ...keberatan.map(async (e) => {
- await sanksiModel.findOneAndUpdate({ _id: e._id }, { is_pengajuan_keberatan: true })
- }),
- ...banding.map(async (e) => {
- await sanksiModel.findOneAndUpdate({ _id: e._id }, { is_pengajuan_banding: true })
- })
- ])
- return response.success(res, {
- message: 'Berhasil migrasi pengajuan'
- })
- })
- exports.dokumen = handleError(async (req, res) => {
- const dokumen = await dokumenModel.find()
- const BATCH_SIZE = 10 // Proses 10 dokumen per batch
- const DELAY_MS = 100 // Delay 100ms antar batch
- if (dokumen?.length) {
- for (let i = 0; i < dokumen.length; i += BATCH_SIZE) {
- const batch = dokumen.slice(i, i + BATCH_SIZE)
- await Promise.all(
- batch.map(async (e) => {
- const path = e.path.split('/').slice(3).join('/')
- await dokumenModel.findOneAndUpdate(
- {
- _id: e._id,
- },
- {
- path: `${coba.decrypt(process.env.W8A1C)}/${path}`,
- }
- )
- })
- )
- // Delay antar batch untuk avoid rate limit
- if (i + BATCH_SIZE < dokumen.length) {
- await new Promise((resolve) => setTimeout(resolve, DELAY_MS))
- }
- }
- }
- return response.success(res, {
- message: `Berhasil migrasi ${dokumen?.length || 0} dokumen`,
- })
- })
- exports.pelanggaranSanksi = handleError(async (req, res) => {
- const sanksi = await sanksiModel.find({
- sanksi: {
- $eq: []
- }
- }).populate('pelanggaran')
- if (sanksi?.length) await Promise.all(sanksi.map(async e => {
- await sanksiModel.findOneAndUpdate({
- _id: e._id
- }, {
- sanksi: e.pelanggaran.map(e2 => ({ label: e2.label_sanksi, description: e2.sanksi, level: e2.level_sanksi }))
- })
- }))
- return response.success(res, {
- message: 'Berhasil migrasi pelanggaran sanksi'
- })
- })
- exports.tambahStep = handleError(async (req, res) => {
- const laporan = await laporanModel.find()
- await Promise.all(laporan.map(e => {
- let step = ['pelaporan']
- if (e.jadwal) step.push('penjadwalan')
- if (e.evaluasi.length) step.push('pemeriksaan')
- if (e.sanksi) step.push('sanksi')
- return laporanModel.updateOne({ _id: e._id }, { step })
- }))
- const sanksi = await sanksiModel.find()
- await Promise.all(sanksi.map(e => {
- let step = []
- if (e.pengajuan?.keberatan) step.push('keberatan')
- if (e.pengajuan?.banding) step.push('banding')
- if (e.perbaikan.length) step.push('dokumen_perbaikan')
- if (e.pengajuan?.cabut_sanksi) step.push('cabut_sanksi')
- return sanksiModel.updateOne({ _id: e._id }, { step })
- }))
- return laporan
- })
- exports.backToSanksi = handleError(async (req, res) => {
- const sanksi = await sanksiModel.find({
- 'masa_berlaku.to_date': {
- $lte: new Date().toISOString()
- },
- aktif: false
- })
- await Promise.all(sanksi.map(e => sanksiModel.findOneAndUpdate({ _id: e._id }, { aktif: true, 'masa_berlaku.berakhir': true })))
- return sanksi
- })
|