Explorar o código

Merge commit '799d8784968344e08dcdf8e9c287aa4f65c3d353'

yazid138 hai 3 semanas
pai
achega
c7db003bb7
Modificáronse 1 ficheiros con 98 adicións e 63 borrados
  1. 98 63
      controller/v1/migrasi.controller.js

+ 98 - 63
controller/v1/migrasi.controller.js

@@ -5,35 +5,7 @@ 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 migrateDokumenInBackground = async () => {
   const dokumen = await dokumenModel.find()
   const BATCH_SIZE = 10 // Proses 10 dokumen per batch
   const DELAY_MS = 100 // Delay 100ms antar batch
@@ -62,62 +34,125 @@ exports.dokumen = handleError(async (req, res) => {
       }
     }
   }
+}
+
+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 ${dokumen?.length || 0} dokumen`,
+    message: 'Berhasil migrasi pengajuan',
   })
 })
 
-exports.pelanggaranSanksi = handleError(async (req, res) => {
-  const sanksi = await sanksiModel.find({
-    sanksi: {
-      $eq: []
-    }
-  }).populate('pelanggaran')
+exports.dokumen = handleError(async (req, res) => {
+  setImmediate(() => {
+    migrateDokumenInBackground().catch((error) => {
+      console.error('Gagal migrasi dokumen di background:', error)
+    })
+  })
+
+  return response.success(res, {
+    message: 'Migrasi dokumen dijalankan di background',
+  })
+})
 
-  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 }))
+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'
+    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 })
-  }))
+  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 })
-  }))
+  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()
+      $lte: new Date().toISOString(),
     },
-    aktif: false
+    aktif: false,
   })
-  await Promise.all(sanksi.map(e => sanksiModel.findOneAndUpdate({ _id: e._id }, { aktif: true, 'masa_berlaku.berakhir': true })))
+  await Promise.all(
+    sanksi.map((e) =>
+      sanksiModel.findOneAndUpdate(
+        { _id: e._id },
+        { aktif: true, 'masa_berlaku.berakhir': true }
+      )
+    )
+  )
   return sanksi
 })
-
-