yazid138 2 months ago
parent
commit
f2c5fa330e

+ 2 - 1
.gitignore

@@ -55,7 +55,8 @@ typings/
 .yarn-integrity
 
 # dotenv environment variables file
-#.env
+.env
+tes.js
 
 # next.js build output
 # .next

+ 18 - 5
controller/v1/auto.controller.js

@@ -5,7 +5,7 @@ const sanksiModel = require('../../model/sanksi.model')
 const laporanModel = require('../../model/laporan.model')
 const {
   TEMPLATE_REMINDER,
-  TEMPLATE_REMINDER2, TRUE, UPDATE_SANKSI, CREATE_SANKSI
+  TEMPLATE_REMINDER2, TRUE, UPDATE_SANKSI, CREATE_SANKSI, PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI
 } = require('../../utils/constanta')
 const moment = require('moment')
 const autoSaveModel = require('../../model/autoSave.model')
@@ -139,7 +139,11 @@ exports.reminderKeberatan = handleError(async (req, res) => {
               value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.`
             }
           ])
-          const contacts = await kontakModel.find()
+          const contacts = await kontakModel.find({
+            'role.id': {
+              $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI]
+            }
+          })
           await logModel.create({
             aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Keberatan`
           })
@@ -204,7 +208,11 @@ exports.reminderBanding = handleError(async (req, res) => {
               value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.`
             }
           ])
-          const contacts = await kontakModel.find()
+          const contacts = await kontakModel.find({
+            'role.id': {
+              $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI]
+            }
+          })
           await logModel.create({
             aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Banding`
           })
@@ -378,7 +386,11 @@ exports.berakhirSanksi = handleError(async (req, res) => {
           }
         ])
         count++
-        const contacts = await kontakModel.find()
+        const contacts = await kontakModel.find({
+          'role.id': {
+            $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI]
+          }
+        })
         await logModel.create({
           aktivitas: `Server berhasil mengirim notifikasi reminder Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Sanksi ${e.no_sanksi} terhadap ${e.laporan.pt.nama} bahwa Masa Berlaku Sanksi tersisa ${dayLeft} hari lagi.`
         })
@@ -436,6 +448,7 @@ exports.batchUpdateSanksi = handleError(async (req, res) => {
     }
   }))
   return response.success(res, {
-    message: error.length ? 'Ada beberapa data yang tidak bisa dikirim ke PDDIKTI' : 'Berhasil mengirim data ke PDDIKTI'
+    message: error.length ? 'Ada beberapa data yang tidak bisa dikirim ke PDDIKTI' : 'Berhasil mengirim data ke PDDIKTI',
+    data: { error },
   })
 })

+ 13 - 0
controller/v1/disk.controller.js

@@ -0,0 +1,13 @@
+const diskService = require('../../services/disk.service')
+const response = require('../../utils/responseHandler')
+
+exports.getData = async (req, res, next) => {
+  const { date } = req.query
+  try {
+    return response.success(res, {
+      message: 'berhasil mengambil data disk', data: await diskService.getData(date)
+    })
+  } catch (error) {
+    next(error)
+  }
+}

+ 2 - 0
controller/v1/sanksi.controller.js

@@ -30,6 +30,8 @@ exports.create = handleError(async (req, res) => {
     no_sanksi: 'string',
     keterangan: 'string',
     pelanggaran_id: 'string',
+    tanggal_terima_sanksi: 'string',
+    tanggal_akhir_keberatan: 'string',
     sanksi: 'string',
   })
   if (!isValid) return

+ 7 - 3
controller/v2/catatan.controller.js

@@ -7,7 +7,10 @@ const { addDokumen } = require('../../utils/dokumenFunction')
 exports.getAllCatatan = async (req, res, next) => {
   try {
     const { sanksi_id } = req.params
-    const data = await catatanService.findAll(sanksi_id)
+    const { menu } = req.query
+    let where = { sanksi_id }
+    if (menu) where.menu = menu
+    const data = await catatanService.findAllWhere(where)
     return response.success(res, {
       message: 'Berhasil mendapatkan daftar catatan',
       data,
@@ -33,12 +36,13 @@ exports.getOneCatatan = async (req, res, next) => {
 exports.createCatatan = [
   validation((req) => req.body, {
     judul: 'string',
+    menu: 'string',
   }),
   async (req, res, next) => {
     try {
       const { sanksi_id } = req.params
-      const { judul, isi } = req.body
-      const data = await catatanService.create({ sanksi_id, judul, isi })
+      const { judul, isi, menu } = req.body
+      const data = await catatanService.create({ sanksi_id, judul, isi, menu })
       return response.success(res, {
         message: 'Berhasil membuat catatan',
         data,

+ 15 - 0
model/disk.model.js

@@ -0,0 +1,15 @@
+const mongoose = require('mongoose')
+const { Schema } = mongoose
+
+module.exports = mongoose.model(
+  'disk_usage',
+  new Schema({
+    filesystem: String,
+    size: Number,
+    used: Number,
+    available: Number,
+    use_percent: String,
+    mounted_on: String,
+  }, { timestamps: true }),
+  'disk_usage'
+)

+ 9 - 0
routes/v1/disk.routes.js

@@ -0,0 +1,9 @@
+const router = require('express').Router()
+const auth = require('../../middleware/verifyToken')
+const role = require('../../middleware/role')
+const diskController = require('../../controller/v1/disk.controller')
+const { PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI } = require('../../utils/constanta')
+
+router.get('/', auth, role([PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI]), diskController.getData)
+
+module.exports = router

+ 1 - 0
routes/v1/index.js

@@ -31,5 +31,6 @@ router.use('/migrasi', auth, roleId([2020, 2023]), require('./migration.routes')
 router.use('/kontak', require('./kontak.routes'))
 router.use('/signature', require('./signature.routes'))
 router.use('/catatan', require('./catatan.routes'))
+router.use('/disk', require('./disk.routes'))
 
 module.exports = router

+ 0 - 1
routes/v1/laporan/index.js

@@ -2,7 +2,6 @@ const router = require('express').Router()
 const laporan = require('../../../controller/v1/laporan.controller')
 const handleDokumen = require('../../../utils/handleDokumen')
 const roleId = require('../../../middleware/role')
-const roleId = require('../../../middleware/role')
 
 router.get('/', laporan.getAll)
 router.get('/jumlah', laporan.jumlahLaporan)

+ 4 - 0
services/catatan.service.js

@@ -16,6 +16,10 @@ exports.findAll = (sanksi_id) => {
   return catatanModel.find({ sanksi_id })
 }
 
+exports.findAllWhere = (where) => {
+  return catatanModel.find(where)
+}
+
 exports.findOne = (catatan_id, sanksi_id = null) => {
   if (!sanksi_id) return catatanModel.findById(catatan_id).populate('daftar_kehadiran_peserta.ttd')
   return catatanModel.findOne({ sanksi_id, _id: catatan_id }).populate('daftar_kehadiran_peserta.ttd')

+ 65 - 0
services/disk.service.js

@@ -0,0 +1,65 @@
+const diskModel = require('../model/disk.model')
+const moment = require('moment')
+
+const dataMoment = (date) => {
+  const arrayDate = (date || moment().add(-1, 'day').format('YYYY-MM-DD')).split('-')
+  switch (arrayDate.length) {
+    case 3:
+      return {
+        year: arrayDate[0],
+        month: arrayDate[1],
+        day: arrayDate[2],
+        unitOfTime: 'day'
+      }
+    case 2:
+      return {
+        year: arrayDate[0],
+        month: arrayDate[1],
+        unitOfTime: 'month'
+      }
+    default:
+      return {
+        year: arrayDate[0],
+        unitOfTime: 'year'
+      }
+  }
+}
+
+exports.getData = async (date) => {
+  const { year, month, day, unitOfTime } = dataMoment(date)
+  const kalender = moment()
+  if (day) kalender.set('date', +day)
+  if (month) kalender.set('month', +month - 1)
+  if (year) kalender.set('year', +year)
+  console.log(kalender.startOf(unitOfTime).toISOString(), kalender.endOf(unitOfTime).toISOString())
+  const data = await diskModel.aggregate([
+    {
+      $match: {
+        timestamp: {
+          $gte: kalender.startOf(unitOfTime).toDate(),
+          $lt: kalender.endOf(unitOfTime).toDate()
+        },
+        mounted_on: '/'
+      }
+    },
+    {
+      $group: {
+        _id: { $dateToString: { format: '%Y-%m-%d', date: '$timestamp' } },
+        data: { $push: '$$ROOT' }
+      }
+    },
+    {
+      $unwind: {
+        path: '$data'
+      }
+    }
+  ]).exec()
+  return data.map(({ _id, data }) => ({
+    date: _id,
+    size: data.size,
+    used: data.used,
+    available: data.available,
+    use_percent: data.use_percent,
+    timestamp: data.timestamp,
+  }))
+}

+ 64 - 0
services/v2/pddikti.service.js

@@ -54,6 +54,68 @@ exports.getPembina = (id, query = {}) => {
   return axios.get(url, token)
 }
 
+const loginDev = ({username, password}) => new Promise((resolve) => {
+  const data = [
+    {
+      id: '28DB23AE-2976-47E0-9410-241A11EE1F88',
+      username: 'rizqevo@outlook.com',
+      password: 'kmnjhbvg',
+      peran: [
+        {
+          peran: {
+            id: 2027,
+          },
+        }
+      ]
+    },
+    {
+      id: '52D3FB82-1578-498E-9C09-3AE13E4DBC61',
+      username: 'sugiyanto@gmail.com',
+      password: 'qwerty',
+      peran: [
+        {
+          peran: {
+            id: 2024,
+          },
+        }
+      ]
+    },
+    {
+      id: '447C71BC-37F8-4D14-94AD-548E6B19400F',
+      username: 'sugiyanti@gmail.com',
+      password: 'asdfgh',
+      peran: [
+        {
+          peran: {
+            id: 2025,
+          },
+        }
+      ]
+    },
+    {
+      id: '03B042F2-68EA-44AD-BA07-3E0B4E07F7E8',
+      username: 'satyagama@gmail.com',
+      password: 'zxcvbn',
+      peran: [
+        {
+          peran: {
+            id: 2026,
+          },
+        }
+      ]
+    }
+  ]
+  const user = data.find(e => e.username === username && e.password === password)
+  if (user) {
+    resolve(user)
+  } else {
+    resolve({
+      code: 400,
+      message: 'Username atau password salah'
+    })
+  }
+})
+
 /**
  *
  * @param username
@@ -66,6 +128,8 @@ exports.login = ({ username, password }) => {
   if (coba.decrypt(process.env.CXQSB) === PRODUCTION) {
     url = 'https://api.kemdikbud.go.id:8445/manakses/2.0/auth'
     token = coba.decrypt(process.env.AFA1T)
+  } else {
+    // return loginDev({ username, password })
   }
   return axios.post(
     url,