andi há 3 anos atrás
pai
commit
f21392562f

+ 9 - 0
.env.bak

@@ -0,0 +1,9 @@
+BASE_URL=http://localhost:5000
+PORT=5000
+SECRET=3d3eb3d842f4e595048f1806ca815f8092e29fb6b98a30dff0b8241ad0e6c273
+
+MONGO_URL=mongodb://localhost:27017/ptb-db
+TOKEN_DEVELOPMENT=77aecfec-10ac-3b4f-ab59-3fbfbeed6324
+TOKEN_PRODUCTION=5b62f743-eef2-3370-8c66-6951b2e9c2c5
+
+ENV=production

+ 43 - 19
controller/auth.controller.js

@@ -5,6 +5,11 @@ const jwt = require('jsonwebtoken')
 const { validate } = require('../utils/validation')
 const axios = require('../utils/axios')
 const qs = require('qs')
+const convertRole = require('../utils/convertRole')
+const { roleData, roleDataProduction } = require('../utils/constanta')
+const logModel = require('../model/log.model')
+const ip = require('ip')
+const osValue = require('../utils/osValue')
 
 exports.login = handleError(async (req, res) => {
   const isValid = validate(res, req.body, {
@@ -35,37 +40,56 @@ exports.login = handleError(async (req, res) => {
   let cekUser = await userModel.findOne({
     user_id: user.id,
   })
+  let role = null
+  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]
+  }
+  let dataRole = {
+    id: role.peran.id,
+    nama: role.peran.nama,
+    menu: role.peran.menu,
+  }
   if (!cekUser) {
-    let role = user.peran[0].peran
-    if (process.env.ENV === 'production') {
-      role = {
-        id:
-          role.id === 2024
-            ? 2020
-            : role.id === 2025
-            ? 2021
-            : role.id === 2026
-            ? 2022
-            : role.id === 2027
-            ? 2023
-            : role.id,
-        nama: role.nama,
-        menu: role.menu,
-      }
-    }
     cekUser = await userModel.create({
       user_id: user.id,
       nama: user.nama,
-      lembaga: user.peran[0].organisasi,
+      lembaga: role.organisasi,
       email: user.username,
       no_hp: user.no_hp,
       alamat: user.alamat,
-      role,
+      role: dataRole,
       isPublic: false,
       isPrivate: false,
     })
+  } else {
+    if (process.env.ENV === 'production') {
+      if (cekUser.role.id !== role.peran.id) {
+        await userModel.updateOne({ _id: cekUser._id }, { role: dataRole })
+      }
+      if (!cekUser.lembaga) {
+        await userModel.updateOne(
+          { _id: cekUser._id },
+          { lembaga: role.organisasi }
+        )
+      }
+      if (cekUser.role.id !== role.peran.id || !cekUser.lembaga) {
+        cekUser = await userModel.findOne({
+          user_id: user.id,
+        })
+      }
+    }
   }
 
+  await logModel.create({
+    user: cekUser._id,
+    aktivitas: `Berhasil login`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
+
   const accessToken = jwt.sign({ _id: cekUser._id }, process.env.SECRET, {
     expiresIn: '1d',
   })

+ 24 - 0
controller/laporan.controller.js

@@ -4,11 +4,14 @@ 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')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -69,6 +72,12 @@ exports.create = handleError(async (req, res) => {
     dokumen: dokumen_id,
     for_pt: false,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil membuat laporan, laporan id: ${data._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
 
   return response.success(res, {
     message: 'Berhasil menambah laporan',
@@ -257,6 +266,13 @@ exports.public = handleError(async (req, res) => {
     { key: '4', value: 'no_laporan', value_text: no_laporan },
   ])
 
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Public berhasil membuat laporan, laporan id: ${data._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
+
   return response.success(res, {
     message: 'Berhasil menambah laporan',
     data,
@@ -360,6 +376,14 @@ exports.update = handleError(async (req, res) => {
       for_pt: false,
     })
   }
+
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil update laporan id: ${laporan._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
+
   return response.success(res, {
     message: 'Berhasil update laporan',
     data: update,

+ 9 - 0
controller/laporan/evaluasi.controller.js

@@ -1,10 +1,13 @@
 const laporanModel = require('../../model/laporan.model')
+const logModel = require('../../model/log.model')
 const handleError = require('../../utils/handleError')
 const response = require('../../utils/responseHandler')
 const { validate } = require('../../utils/validation')
 const { addManyDokumen } = require('../../utils/dokumenFunction')
 const { cekSatuDataLaporan } = require('../../utils/cekData')
 const pemantauanModel = require('../../model/pemantauan.model')
+const ip = require('ip')
+const osValue = require('../../utils/osValue')
 
 exports.add = handleError(async (req, res) => {
   const user = req.user
@@ -65,6 +68,12 @@ exports.add = handleError(async (req, res) => {
     for_pt: false,
     for_public,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil melakukan evaluasi pada laporan id: ${laporan._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
 
   return response.success(res, {
     message: 'Berhasil tambah evaluasi',

+ 13 - 3
controller/laporan/jadwal.controller.js

@@ -4,6 +4,9 @@ const handleError = require('../../utils/handleError')
 const response = require('../../utils/responseHandler')
 const { validate } = require('../../utils/validation')
 const pemantauanModel = require('../../model/pemantauan.model')
+const logModel = require('../../model/log.model')
+const ip = require('ip')
+const osValue = require('../../utils/osValue')
 
 exports.update = handleError(async (req, res) => {
   const user = req.user
@@ -15,12 +18,12 @@ exports.update = handleError(async (req, res) => {
     warna: 'string',
   })
   if (!isValid) return
-  
+
   const { judul, dari_tanggal, sampai_tanggal, warna } = req.body
-  
+
   const laporan = await cekSatuDataLaporan(res, user, id)
   if (!laporan) return
-  
+
   let for_public = true
   if (laporan.jadwal) {
     // message = 'Mengubah Jadwal Pemeriksaan'
@@ -57,6 +60,13 @@ exports.update = handleError(async (req, res) => {
     for_public,
   })
 
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil ubah jadwal laporan id: ${laporan._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
+
   return response.success(res, {
     message: 'Berhasil ubah jadwal',
     data,

+ 35 - 0
controller/log.controller.js

@@ -0,0 +1,35 @@
+const logModel = require('../model/log.model')
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+const { validate } = require('../utils/validation')
+const ip = require('ip')
+const osValue = require('../utils/osValue')
+
+exports.create = handleError(async (req, res) => {
+  const user = req.user
+  const { aktivitas } = req.body
+
+  const isValid = validate(res, req.body, {
+    aktivitas: 'string',
+  })
+  if (!isValid) return
+
+  await logModel.create({
+    user: user._id,
+    aktivitas,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
+
+  return response.success(res, {
+    message: 'log berhasil dibuat',
+  })
+})
+
+exports.all = handleError(async (req, res) => {
+  const log = await logModel.find().populate('user').sort({ createdAt: -1 })
+
+  return response.success(res, {
+    data: log,
+  })
+})

+ 3 - 10
controller/pemantauan.controller.js

@@ -59,23 +59,16 @@ exports.getPT = handleError(async (req, res) => {
 })
 
 exports.public = handleError(async (req, res) => {
-  const { no_hp, no_laporan } = req.query
-  if (!no_hp || !no_laporan) {
+  const { no_laporan } = req.query
+  if (!no_laporan) {
     return response.error(res, {
       message: 'query no_hp dan no_laporan harus ada',
     })
   }
-  const user = await userModel.find({ no_hp })
-  if (!user.length) {
-    return response.error(res, {
-      message: 'user tidak ditemukan',
-    })
-  }
-  const user_id = user.map((e) => e._id)
+
   const laporan = await laporanModel
     .findOne({
       no_laporan,
-      user: { $in: user_id },
     })
     .populate('dokumen')
     .populate({ path: 'pelanggaran', select: 'pelanggaran' })

+ 10 - 0
controller/sanksi.controller.js

@@ -4,6 +4,7 @@ const response = require('../utils/responseHandler')
 const { addManyDokumen } = require('../utils/dokumenFunction')
 const { validate } = require('../utils/validation')
 const pemantauanModel = require('../model/pemantauan.model')
+const logModel = require('../model/log.model')
 const { hariKerja } = require('../utils/hariKerja')
 const {
   cekSatuDataSanksi,
@@ -12,6 +13,8 @@ const {
   cekBanyakDataSanksi,
 } = require('../utils/cekData')
 const laporanModel = require('../model/laporan.model')
+const ip = require('ip')
+const osValue = require('../utils/osValue')
 
 exports.create = handleError(async (req, res) => {
   const { no_sanksi, keterangan } = req.body
@@ -71,6 +74,13 @@ exports.create = handleError(async (req, res) => {
     keterangan: 'Melakukan penetapan Sanksi',
     dokumen: dokumen_id,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil melakukan penetapan sanksi pada laporan id: ${laporan._id}, sanksi id: ${data._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
+
   return response.success(res, {
     message: 'Berhasil membuat Sanksi',
     data,

+ 17 - 0
controller/sanksi/banding.controller.js

@@ -7,6 +7,9 @@ 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')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -61,6 +64,12 @@ exports.create = handleError(async (req, res) => {
     },
     { key: '3', value: 'no_sanksi', value_text: sanksi.no_sanksi },
   ])
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil mengajukan banding pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
   return response.success(res, {
     data,
     message: 'Berhasil menambah pengajuan banding',
@@ -127,6 +136,14 @@ exports.createJawaban = handleError(async (req, res) => {
     dokumen: dokumen_id,
     for_public,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil ${
+      sanksi.jawaban?.banding ? 'mengubah jawaban' : 'menjawab'
+    } pengajuan banding pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
 
   return response.success(res, {
     data,

+ 17 - 0
controller/sanksi/cabutSanksi.controller.js

@@ -5,6 +5,9 @@ const { validate } = require('../../utils/validation')
 const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../../utils/cekData')
 const response = require('../../utils/responseHandler')
 const pemantauanModel = require('../../model/pemantauan.model')
+const logModel = require('../../model/log.model')
+const ip = require('ip')
+const osValue = require('../../utils/osValue')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -48,6 +51,12 @@ exports.create = handleError(async (req, res) => {
     keterangan: 'Mengajukan Pencabutan Sanksi',
     dokumen: dokumen_id,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil melakukan cabut_sanksi pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
   return response.success(res, {
     data,
     message: 'Berhasil menambah cabut_sanksi',
@@ -114,6 +123,14 @@ exports.createJawaban = handleError(async (req, res) => {
     dokumen: dokumen_id,
     for_public,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil ${
+      sanksi.jawaban?.cabut_sanksi ? 'mengubah jawaban' : 'menjawab'
+    } pengajuan pencabutan sanski pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
   return response.success(res, {
     data,
   })

+ 17 - 0
controller/sanksi/keberatan.controller.js

@@ -7,6 +7,9 @@ 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')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -65,6 +68,12 @@ exports.create = handleError(async (req, res) => {
     },
     { key: '3', value: 'no_sanksi', value_text: sanksi.no_sanksi },
   ])
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil mengajukan keberatan pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
   return response.success(res, {
     data,
     message: 'Berhasil menambah keberatan',
@@ -136,6 +145,14 @@ exports.createJawaban = handleError(async (req, res) => {
     dokumen: dokumen_id,
     for_public,
   })
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil ${
+      sanksi.jawaban?.keberatan ? 'mengubah jawaban' : 'menjawab'
+    } pengajuan keberatan pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
 
   return response.success(res, {
     data,

+ 9 - 0
controller/sanksi/perbaikan.controller.js

@@ -6,6 +6,9 @@ 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')
 
 exports.add = handleError(async (req, res) => {
   const user = req.user
@@ -70,6 +73,12 @@ exports.add = handleError(async (req, res) => {
     },
     { key: '3', value: 'no_sanksi', value_text: sanksi.no_sanksi },
   ])
+  await logModel.create({
+    user: user._id,
+    aktivitas: `Berhasil melakukan perbaikan pada sanksi id: ${sanksi._id}`,
+    os: osValue(),
+    ipv4: ip.address('public', 'ipv4'),
+  })
   return response.success(res, {
     data,
     message: 'Berhasil menambah Perbaikan',

+ 9 - 0
env.bak

@@ -0,0 +1,9 @@
+BASE_URL=http://localhost:5000
+PORT=5000
+SECRET=3d3eb3d842f4e595048f1806ca815f8092e29fb6b98a30dff0b8241ad0e6c273
+
+MONGO_URL=mongodb://localhost:27017/ptb-db
+TOKEN_DEVELOPMENT=77aecfec-10ac-3b4f-ab59-3fbfbeed6324
+TOKEN_PRODUCTION=5b62f743-eef2-3370-8c66-6951b2e9c2c5
+
+ENV=production

+ 20 - 0
model/log.model.js

@@ -0,0 +1,20 @@
+const mongoose = require('mongoose')
+const user = require('./user.model')
+const { Schema, Types } = mongoose
+
+module.exports = mongoose.model(
+  'Log',
+  new Schema(
+    {
+      user: {
+        type: Types.ObjectId,
+        ref: user,
+      },
+      aktivitas: { type: String },
+      os: { type: String },
+      ipv4: { type: String },
+    },
+    { timestamps: true }
+  ),
+  'log'
+)

+ 1 - 1
model/sanksi.model.js

@@ -10,7 +10,7 @@ module.exports = mongoose.model(
   new Schema(
     {
       no_sanksi: String,
-      laporan: { type: Types.ObjectId, ref: laporan },
+      laporan: { type: Types.ObjectId, unique: true, ref: laporan },
       user: { type: Types.ObjectId, ref: user },
       pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
       keterangan: String,

+ 1 - 0
routes/v1/index.js

@@ -19,5 +19,6 @@ router.use('/pt', auth, require('./pt.routes'))
 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'))
 
 module.exports = router

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

@@ -0,0 +1,9 @@
+const router = require('express').Router()
+const log = require('../../controller/log.controller')
+const auth = require('../../middleware/verifyToken')
+const roleId = require('../../middleware/role')
+
+router.post('/', auth, roleId([2020, 2021, 2023]), log.create)
+router.get('/', auth, roleId(2023), log.all)
+
+module.exports = router

+ 2 - 0
utils/constanta.js

@@ -0,0 +1,2 @@
+exports.roleData = [2020, 2021, 2022, 2023]
+exports.roleDataProduction = [2024, 2025, 2026, 2027]

+ 11 - 0
utils/convertRole.js

@@ -0,0 +1,11 @@
+module.exports = (roleId) => {
+  return roleId === 2024
+    ? 2020
+    : roleId === 2025
+    ? 2021
+    : roleId === 2026
+    ? 2022
+    : roleId === 2027
+    ? 2023
+    : roleId
+}

+ 15 - 0
utils/osValue.js

@@ -0,0 +1,15 @@
+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'
+  }
+}