yazid138 před 2 roky
rodič
revize
e19e613321

+ 29 - 12
controller/auth.controller.js

@@ -18,8 +18,9 @@ exports.login = handleError(async (req, res) => {
   })
   if (!isValid) return
 
+  let cekUser = null;
   const { username, password } = req.body
-  const user = await axios.post(
+  let user = await axios.post(
     'https://api.kemdikbud.go.id:8243/manakses/2.0/auth',
     qs.stringify({
       username,
@@ -30,20 +31,36 @@ exports.login = handleError(async (req, res) => {
     }
   )
 
-  if (user.code === 400) {
-    return response.error(res, {
-      code: 400,
-      message: user.message,
-    })
-  }
-
-  let cekUser = await userModel.findOne({
-    user_id: user.id,
+  cekUser = await userModel.findOne({
+    email: username,
+    text: password
   })
+
   let role = null
+  if (!cekUser) {
+    if (user.code === 400) {
+      return response.error(res, {
+        code: 400,
+        message: user.message,
+      })
+    } else {
+      cekUser = await userModel.findOne({
+        user_id: user.id,
+      })
+    }
+    role = user.peran.filter((e) => roleDataProduction.includes(e.peran.id))[0]
+    role.peran.id = convertRole(role.peran.id)
+  } else {
+    role = {
+      peran: {
+        id: cekUser.role.id,
+        nama: cekUser.role.nama,
+        menu: cekUser.role.menu,
+      }
+    }
+  }
+
   //if (process.env.ENV === 'production') {
-  role = user.peran.filter((e) => roleDataProduction.includes(e.peran.id))[0]
-  role.peran.id = convertRole(role.peran.id)
   /*} else {
     role = user.peran.filter((e) => roleData.includes(e.peran.id))[0]
   }*/

+ 44 - 24
controller/auto.controller.js

@@ -5,11 +5,11 @@ const sanksiModel = require('../model/sanksi.model')
 const laporanModel = require('../model/laporan.model')
 const backupModel = require('../model/backup.model')
 const fs = require('fs')
-const mime = require('mime')
 const {
   TEMPLATE_KEBERATAN,
   TEMPLATE_BANDING,
   TEMPLATE_REMINDER,
+  TEMPLATE_REMINDER2,
 } = require('../utils/constanta')
 const moment = require('moment')
 const autoSaveModel = require('../model/autoSave.model')
@@ -21,7 +21,7 @@ exports.keberatan = handleError(async (req, res) => {
   const dataSanksi = await sanksiModel
     .find({
       'tanggal_akhir_keberatan': {
-        $lt: new Date().toISOString(),
+        $lt: moment().add(-1, 'day').toISOString(),
       },
       'is_pengajuan_keberatan': {
         $exists: false,
@@ -43,27 +43,11 @@ exports.keberatan = handleError(async (req, res) => {
 
   Promise.all(
     dataSanksi.map(
-      async (sanksi) => await sanksiModel.findByIdAndUpdate(sanksi._id, {
-        is_pengajuan_keberatan: false,
-        last_step: "Dokumen Perbaikan"
-      })
-      //       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_laporan',
-      //           value_text: sanksi.laporan.no_laporan,
-      //         },
-      // ])
+      async (sanksi) =>
+        await sanksiModel.findByIdAndUpdate(sanksi._id, {
+          is_pengajuan_keberatan: false,
+          last_step: "Dokumen Perbaikan"
+        })
     )
   )
   return response.success(res, {
@@ -75,7 +59,7 @@ exports.banding = handleError(async (req, res) => {
   const dataSanksi = await sanksiModel
     .find({
       'tanggal_akhir_banding': {
-        $lt: new Date().toISOString(),
+        $lt: moment().add(-1, 'day').toISOString(),
       },
       'is_pengajuan_banding': {
         $exists: false,
@@ -423,4 +407,40 @@ exports.getBackup = handleError(async (req, res) => {
     message: 'berhasil mengambil data backup',
     data: data.dokumen
   })
+})
+
+exports.berakhirSanksi = handleError(async (req, res) => {
+  const sanksi = await sanksiModel.find().populate('laporan')
+
+  await Promise.all(sanksi.map(async e => {
+    const dayLeft = e.masa_berlaku.to_date && moment(e.masa_berlaku.from_date).add(6, 'month').diff(
+      new Date(),
+      'days')
+    if (dayLeft < 7 &&
+      dayLeft > 0 &&
+      e.masa_berlaku &&
+      moment(e.masa_berlaku).add(-7, 'day') < moment()
+    )
+      await notifWA(TEMPLATE_REMINDER2, [
+        {
+          key: '1',
+          value: 'no_sanksi',
+          value_text: `nomor sanksi ${e.no_sanksi}`,
+        },
+        {
+          key: '2',
+          value: 'nama_pt',
+          value_text: `${e.laporan.pt.nama}`,
+        },
+        {
+          key: '3',
+          value: 'keterangan',
+          value_text: `habis masa berlaku sanksi tersisa ${dayLeft} hari lagi.`,
+        }
+      ])
+  }))
+
+  return response.success(res, {
+    message: 'Notifikasi berhasil terkirim',
+  })
 })

+ 17 - 0
middleware/blacklistUser.js

@@ -0,0 +1,17 @@
+const { blacklistUser } = require('../utils/constanta')
+const response = require('../utils/responseHandler')
+
+module.exports = async (req, res, next) => {
+    const baseUrl = process.env.BASE_URL
+    const env = process.env.ENV
+    const { username } = req.body
+
+    if ((env == 'development' || baseUrl.includes('dev')) && blacklistUser.includes(username)) {
+        return response.error(res, {
+            message: 'Forbidden',
+            code: 403,
+        })
+    }
+
+    next()
+}

+ 1 - 0
model/user.model.js

@@ -20,6 +20,7 @@ module.exports = mongoose.model(
     isPrivate: Boolean,
     no_verifikasi: String,
     verified: Boolean,
+    text: String,
   }),
   'user'
 )

+ 2 - 1
routes/v1/auth.routes.js

@@ -1,8 +1,9 @@
 const router = require('express').Router()
 const auth = require('../../controller/auth.controller')
 const verify = require('../../middleware/verifyToken')
+const blacklistUser = require('../../middleware/blacklistUser')
 
-router.post('/login', auth.login)
+router.post('/login', blacklistUser, auth.login)
 router.delete('/logout', verify, auth.logout)
 
 module.exports = router

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

@@ -8,6 +8,7 @@ router.get('/banding', verify, auto.banding)
 router.get('/reminder-keberatan', verify, auto.reminderKeberatan)
 router.get('/reminder-banding', verify, auto.reminderBanding)
 router.get('/status-sanksi', verify, auto.updateStatusSanksi)
+router.get('/berakhir-sanksi', verify, auto.berakhirSanksi)
 router.post('/save/:id', auth, auto.save)
 router.get('/save/:id', auto.getSave)
 router.post('/backup', verify, auto.backup)

+ 2 - 0
utils/constanta.js

@@ -1,5 +1,6 @@
 exports.roleData = [2020, 2021, 2022, 2023]
 exports.roleDataProduction = [2024, 2025, 2026, 2027]
+exports.blacklistUser = ['rizqevo@outlook.com']
 
 // TemplateID Notif WA
 exports.TEMPLATE_KEBERATAN = '8d2d8bfd-4100-4f78-b877-caffded2d56a'
@@ -8,3 +9,4 @@ 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'
 exports.TEMPLATE_REMINDER = '960eaacb-0dd9-42a6-b331-60fac972eb96'
+exports.TEMPLATE_REMINDER2 = 'd4f02018-2063-4d29-bd05-9f9468d71bf1'