yazid138 преди 3 години
родител
ревизия
6686972c1d

+ 1 - 0
.env

@@ -5,5 +5,6 @@ SECRET=3d3eb3d842f4e595048f1806ca815f8092e29fb6b98a30dff0b8241ad0e6c273
 MONGO_URL=mongodb://mongodb-production.sidali.sixsenz.net:50010/ptb-db
 TOKEN_DEVELOPMENT=77aecfec-10ac-3b4f-ab59-3fbfbeed6324
 TOKEN_PRODUCTION=5b62f743-eef2-3370-8c66-6951b2e9c2c5
+TOKEN_AUTO=5j12h43g6hj2367234k57
 
 ENV=production

+ 104 - 0
controller/auto.controller.js

@@ -0,0 +1,104 @@
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+const { notifWA } = require('../utils/notifFunction')
+const sanksiModel = require('../model/sanksi.model')
+const { TEMPLATE_KEBERATAN, TEMPLATE_BANDING } = require('../utils/constanta')
+
+exports.keberatan = handleError(async (req, res) => {
+  const dataSanksi = await sanksiModel
+    .find({
+      'batas_waktu.keberatan': {
+        $lt: new Date().toISOString(),
+      },
+      'batas_waktu.jawaban_keberatan': {
+        $exists: false,
+        $eq: null,
+      },
+    })
+    .populate('user')
+    .populate('laporan')
+
+  if (!dataSanksi.length) {
+    return response.success(res, {
+      message: 'Tidak ada notifikasi yg dikirim',
+    })
+  }
+
+  Promise.all(
+    dataSanksi.map(
+      async (sanksi) =>
+        await notifWA(TEMPLATE_KEBERATAN, [
+          {
+            key: '1',
+            value: 'nama_pt',
+            value_text: sanksi.laporan.pt.nama,
+          },
+          {
+            key: '2',
+            value: 'pemberi_sanksi',
+            value_text: sanksi.user.lembaga.nama,
+          },
+          {
+            key: '3',
+            value: 'no_sanksi',
+            value_text: sanksi.no_sanksi,
+          },
+        ])
+    )
+  )
+  return response.success(res, {
+    message: 'Notifikasi berhasil terkirim',
+  })
+})
+
+exports.banding = handleError(async (req, res) => {
+  const dataSanksi = await sanksiModel
+    .find({
+      'batas_waktu.banding': {
+        $lt: new Date().toISOString(),
+      },
+      'batas_waktu.jawaban_banding': {
+        $exists: false,
+        $eq: null,
+      },
+      'batas_waktu.jawaban_keberatan': {
+        $exists: true,
+        $ne: null,
+      },
+    })
+    .populate('user')
+    .populate('laporan')
+
+  if (!dataSanksi.length) {
+    return response.success(res, {
+      message: 'Tidak ada notifikasi yg dikirim',
+    })
+  }
+
+  Promise.all(
+    dataSanksi.map(
+      async (sanksi) =>
+        await notifWA(TEMPLATE_BANDING, [
+          {
+            key: '1',
+            value: 'nama_pt',
+            value_text: sanksi.laporan.pt.nama,
+          },
+          {
+            key: '2',
+            value: 'pemberi_sanksi',
+            value_text: sanksi.user.lembaga.nama,
+          },
+          {
+            key: '3',
+            value: 'no_sanksi',
+            value_text: sanksi.no_sanksi,
+          },
+        ])
+    )
+  )
+  return response.success(res, {
+    message: 'Notifikasi berhasil terkirim',
+    data: dataSanksi,
+  })
+})

+ 2 - 4
controller/laporan.controller.js

@@ -4,14 +4,12 @@ const response = require('../utils/responseHandler')
 const laporanModel = require('../model/laporan.model')
 const pelanggaranModel = require('../model/pelanggaran.model')
 const pemantauanModel = require('../model/pemantauan.model')
-const logModel = require('../model/log.model')
 const { validate } = require('../utils/validation')
 const { notifWA } = require('../utils/notifFunction')
 const { addManyDokumen } = require('../utils/dokumenFunction')
 const userModel = require('../model/user.model')
 const { cekSatuDataLaporan, cekBanyakDataLaporan } = require('../utils/cekData')
-const ip = require('ip')
-const osValue = require('../utils/osValue')
+const { TEMPLATE_LAPORAN } = require('../utils/constanta')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -249,7 +247,7 @@ exports.public = handleError(async (req, res) => {
 
   if (no_verifikasi)
     await userModel.findByIdAndUpdate(user._id, { verified: true })
-  await notifWA('d5609c3c-e9e9-4dbe-9a4e-e8fa772d6770', [
+  await notifWA(TEMPLATE_LAPORAN, [
     {
       key: '1',
       value: 'nama',

+ 2 - 4
controller/sanksi/banding.controller.js

@@ -7,9 +7,7 @@ const response = require('../../utils/responseHandler')
 const { hariKerja } = require('../../utils/hariKerja')
 const pemantauanModel = require('../../model/pemantauan.model')
 const { notifWA } = require('../../utils/notifFunction')
-const logModel = require('../../model/log.model')
-const ip = require('ip')
-const osValue = require('../../utils/osValue')
+const { TEMPLATE_BANDING } = require('../../utils/constanta')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -55,7 +53,7 @@ exports.create = handleError(async (req, res) => {
     keterangan: 'Mengajukan Banding',
     dokumen: dokumen_id,
   })
-  await notifWA('2bbc0080-1187-4213-8017-b6d1d6ec3cbb', [
+  await notifWA(TEMPLATE_BANDING, [
     { key: '1', value: 'pt', value_text: sanksi.laporan.pt.nama },
     {
       key: '2',

+ 2 - 4
controller/sanksi/keberatan.controller.js

@@ -7,9 +7,7 @@ const response = require('../../utils/responseHandler')
 const { hariKerja } = require('../../utils/hariKerja')
 const pemantauanModel = require('../../model/pemantauan.model')
 const { notifWA } = require('../../utils/notifFunction')
-const logModel = require('../../model/log.model')
-const ip = require('ip')
-const osValue = require('../../utils/osValue')
+const { TEMPLATE_KEBERATAN } = require('../../utils/constanta')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -59,7 +57,7 @@ exports.create = handleError(async (req, res) => {
     keterangan: 'Mengajukan Keberatan',
     dokumen: dokumen_id,
   })
-  await notifWA('8d2d8bfd-4100-4f78-b877-caffded2d56a', [
+  await notifWA(TEMPLATE_KEBERATAN, [
     { key: '1', value: 'pt', value_text: sanksi.laporan.pt.nama },
     {
       key: '2',

+ 3 - 5
controller/sanksi/perbaikan.controller.js

@@ -6,9 +6,7 @@ const { cekSatuDataSanksi } = require('../../utils/cekData')
 const response = require('../../utils/responseHandler')
 const pemantauanModel = require('../../model/pemantauan.model')
 const { notifWA } = require('../../utils/notifFunction')
-const logModel = require('../../model/log.model')
-const ip = require('ip')
-const osValue = require('../../utils/osValue')
+const { TEMPLATE_PERBAIKAN_DOKUMEN } = require('../../utils/constanta')
 
 exports.add = handleError(async (req, res) => {
   const user = req.user
@@ -58,13 +56,13 @@ exports.add = handleError(async (req, res) => {
   await pemantauanModel.create({
     laporan: sanksi.laporan._id,
     sanksi: sanksi._id,
-    action: 'ADD PERBAIKANDOKUMEN',
+    action: 'ADD PERBAIKAN DOKUMEN',
     user: user._id,
     pt_id: sanksi.laporan.pt.id,
     keterangan: 'Melakukan Perbaikan Dokumen',
     dokumen: dokumen_id,
   })
-  await notifWA('891ee9c7-39f8-416e-af5c-6b3a10e9dbec', [
+  await notifWA(TEMPLATE_PERBAIKAN_DOKUMEN, [
     { key: '1', value: 'pt', value_text: sanksi.laporan.pt.nama },
     {
       key: '2',

+ 2 - 1
controller/user.controller.js

@@ -6,6 +6,7 @@ const { notifWA2 } = require('../utils/notifFunction')
 const axios = require('../utils/axios')
 const { addDokumen } = require('../utils/dokumenFunction')
 const jwt = require('jsonwebtoken')
+const { TEMPLATE_VERIFIKASI } = require('../utils/constanta')
 
 exports.addUserPublic = handleError(async (req, res) => {
   const { no_laporan, pt_id, nama, email, no_hp, alamat, is_private } = req.body
@@ -66,7 +67,7 @@ exports.addUserPublic = handleError(async (req, res) => {
   })
 
   const notif = await notifWA2(
-    '37a9ccba-e1bc-4d02-86e0-3be4c718af2a',
+    TEMPLATE_VERIFIKASI,
     { nama: nama || 'rahasia', no_hp: no_hp2 },
     [
       { key: '1', value: 'pt', value_text: pt[0].nama },

+ 21 - 0
middleware/verifyTokenAuto.js

@@ -0,0 +1,21 @@
+const response = require('../utils/responseHandler')
+
+module.exports = (req, res, next) => {
+  const authHeader = req.headers.authorization
+  const token = authHeader && authHeader.split(' ')[1]
+
+  if (!token)
+    return response.error(res, {
+      code: 401,
+      message: 'Token tidak ada',
+    })
+
+  if (process.env.TOKEN_AUTO === token) {
+    return next()
+  }
+
+  return response.error(res, {
+    code: 401,
+    message: 'Unauthorized',
+  })
+}

+ 7 - 0
routes/v1/auto.routes.js

@@ -0,0 +1,7 @@
+const router = require('express').Router()
+const auto = require('../../controller/auto.controller')
+
+router.get('/keberatan', auto.keberatan)
+router.get('/banding', auto.banding)
+
+module.exports = router

+ 2 - 0
routes/v1/index.js

@@ -1,6 +1,7 @@
 const router = require('express').Router()
 const auth = require('../../middleware/verifyToken')
 const roleId = require('../../middleware/role')
+const verify = require('../../middleware/verifyTokenAuto')
 
 router.get('/', (req, res) => {
   return res.json({
@@ -20,5 +21,6 @@ router.use('/pelanggaran', auth, require('./pelanggaran.routes'))
 router.use('/lembaga', auth, roleId([2020, 2023]), require('./lembaga.routes'))
 router.use('/graph', require('./graph.routes'))
 router.use('/log', require('./log.routes'))
+router.use('/auto', verify, require('./auto.routes'))
 
 module.exports = router

+ 7 - 0
utils/constanta.js

@@ -1,2 +1,9 @@
 exports.roleData = [2020, 2021, 2022, 2023]
 exports.roleDataProduction = [2024, 2025, 2026, 2027]
+
+// TemplateID Notif WA
+exports.TEMPLATE_KEBERATAN = '8d2d8bfd-4100-4f78-b877-caffded2d56a'
+exports.TEMPLATE_BANDING = '2bbc0080-1187-4213-8017-b6d1d6ec3cbb'
+exports.TEMPLATE_LAPORAN = 'd5609c3c-e9e9-4dbe-9a4e-e8fa772d6770'
+exports.TEMPLATE_PERBAIKAN_DOKUMEN = '891ee9c7-39f8-416e-af5c-6b3a10e9dbec'
+exports.TEMPLATE_VERIFIKASI = '37a9ccba-e1bc-4d02-86e0-3be4c718af2a'

+ 1 - 3
utils/notifFunction.js

@@ -3,9 +3,7 @@ const kontakModel = require('../model/kontak.model')
 
 exports.notifWA = async (templateId, data, where = {}) => {
   const kontak = await kontakModel.find(where)
-  const contacts = kontak.map((e) => {
-    return { name: e.nama, number: e.no_hp }
-  })
+  const contacts = kontak.map((e) => ({ name: e.nama, number: e.no_hp }))
   const send = await axios.post(
     'https://api.kemdikbud.go.id:8243/qontak/1.0/send',
     {

+ 9 - 11
utils/osValue.js

@@ -1,15 +1,13 @@
 const osValue = process.platform
 
 module.exports = () => {
-  if (osValue == 'darwin') {
-    return 'Mac OS'
-  } else if (osValue == 'win32') {
-    return 'Windows OS'
-  } else if (osValue == 'android') {
-    return 'Android OS'
-  } else if (osValue == 'linux') {
-    return 'Linux OS'
-  } else {
-    return 'Other OS'
-  }
+  return osValue == 'darwin'
+    ? 'Mac OS'
+    : osValue == 'win32'
+    ? 'Windows OS'
+    : osValue == 'android'
+    ? 'Android OS'
+    : osValue == 'linux'
+    ? 'Linux OS'
+    : 'Other OS'
 }