yazid138 3 tahun lalu
induk
melakukan
b5fe47c2d6

+ 104 - 0
controller/banding.controller.js

@@ -0,0 +1,104 @@
+const handleError = require('../utils/handleError')
+const sanksiModel = require('../model/sanksi.model')
+const { addManyDokumen } = require('../utils/dokumenFunction')
+const { validate } = require('../utils/validation')
+const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../utils/cekData')
+const response = require('../utils/responseHandler')
+
+exports.create = handleError(async (req, res) => {
+  const user = req.user
+  const { laporan_id, sanksi_id } = req.query
+  if (!laporan_id || !sanksi_id) {
+    return response.error(res, {
+      message: 'query laporan_id atau sanksi_id harus ada',
+    })
+  }
+
+  const laporan = await cekSatuDataLaporan(res, user, laporan_id)
+  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
+  if (!laporan || !sanksi) return
+
+  const files = req.files
+  if (!files?.length) {
+    return response.error(res, {
+      message: 'dokumen harus ada',
+    })
+  }
+  const dokumen = await addManyDokumen(files)
+  const dokumen_id = dokumen.map((e) => e._id)
+
+  const data = await sanksiModel.findOneAndUpdate(
+    {
+      laporan: laporan._id,
+      _id: sanksi._id,
+      banding: { $exists: false, $eq: null },
+      ['jawaban.keberatan']: { $exists: true, $ne: null },
+    },
+    {
+      banding: {
+        dokumen: dokumen_id,
+      },
+    }
+  )
+  if (!data) {
+    return response.error(res, {
+      message: 'banding sudah ada atau jawaban keberatan belum ada',
+    })
+  }
+  return response.success(res, {
+    data,
+    message: 'Berhasil menambah keberatan',
+  })
+})
+
+exports.createJawaban = handleError(async (req, res) => {
+  const user = req.user
+  const { laporan_id, sanksi_id } = req.query
+  if (!laporan_id || !sanksi_id) {
+    return response.error(res, {
+      message: 'query laporan_id atau sanksi_id harus ada',
+    })
+  }
+
+  const laporan = await cekSatuDataLaporan(res, user, laporan_id)
+  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
+  if (!laporan || !sanksi) return
+
+  const isValid = validate(res, req.body, {
+    status: 'string',
+    keterangan: 'string',
+  })
+  if (!isValid) return
+
+  const files = req.files
+  if (!files?.length) {
+    return response.error(res, {
+      message: 'dokumen harus ada',
+    })
+  }
+  const dokumen = await addManyDokumen(files)
+  const dokumen_id = dokumen.map((e) => e._id)
+  const { status, keterangan } = req.body
+  const data = await sanksiModel.findOneAndUpdate(
+    {
+      laporan: laporan._id,
+      _id: sanksi._id,
+      banding: { $exists: true, $ne: null },
+    },
+    {
+      ['jawaban.banding']: {
+        status,
+        keterangan,
+        dokumen: dokumen_id,
+      },
+    }
+  )
+  if (!data) {
+    return response.error(res, {
+      message: 'banding tidak ada',
+    })
+  }
+  return response.success(res, {
+    data,
+  })
+})

+ 0 - 1
model/chunk.model.js

@@ -4,7 +4,6 @@ const { Schema } = mongoose
 module.exports = mongoose.model(
   'Chunk',
   new Schema({
-    type: String,
     data: Buffer,
     size: Number,
   }),

+ 1 - 0
model/dokumen.model.js

@@ -8,6 +8,7 @@ module.exports = mongoose.model(
     chunk: { type: Types.ObjectId, ref: chunk },
     judul: String,
     path: String,
+    type: String,
   }),
   'dokumen'
 )

+ 20 - 0
routes/v1/sanksi/banding.routes.js

@@ -0,0 +1,20 @@
+const router = require('express').Router()
+const banding = require('../../../controller/banding.controller')
+const handleDokumen = require('../../../utils/handleDokumen')
+const roleId = require('../../../middleware/role')
+
+router.post(
+  '/create',
+  roleId(2022),
+  handleDokumen.array('dokumen'),
+  banding.create
+)
+
+router.post(
+  '/jawaban/create',
+  roleId([2020, 2021]),
+  handleDokumen.array('dokumen'),
+  banding.createJawaban
+)
+
+module.exports = router

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

@@ -13,5 +13,6 @@ router.get('/', roleId([2020, 2021, 2022]), sanksi.getAll)
 router.get('/:sanksi_id', roleId([2020, 2021, 2022]), sanksi.getOne)
 
 router.use('/keberatan', require('./keberatan.routes'))
+router.use('/banding', require('./banding.routes'))
 
 module.exports = router

+ 8 - 0
utils/cekData.js

@@ -82,6 +82,10 @@ exports.cekSatuDataSanksi = async (res, user, sanksi_id, where = {}) => {
     })
     .populate('dokumen')
     .populate('pelanggaran')
+    .populate('keberatan.dokumen')
+    .populate('jawaban.keberatan.dokumen')
+    .populate('banding.dokumen')
+    .populate('jawaban.banding.dokumen')
   if (!sanksi?.laporan) {
     response.error(res, {
       message: 'sanksi_id tidak ada',
@@ -115,6 +119,10 @@ exports.cekBanyakDataSanksi = async (user, where = {}) => {
     })
     .populate('dokumen')
     .populate('pelanggaran')
+    .populate('keberatan.dokumen')
+    .populate('jawaban.keberatan.dokumen')
+    .populate('banding.dokumen')
+    .populate('jawaban.banding.dokumen')
   data = data.filter((e) => e.laporan !== null)
   return data
 }

+ 2 - 2
utils/dokumenFunction.js

@@ -5,10 +5,10 @@ exports.addDokumen = async (dokumen) => {
   const chunk = await chunkModel.create({
     data: dokumen.buffer,
     size: dokumen.size,
-    type: dokumen.mimetype,
   })
   const data = await dokumenModel.create({
     chunk: chunk._id,
+    type: dokumen.mimetype,
     judul: Date.now() + '-' + dokumen.originalname,
     path: process.env.BASE_URL + '/dokumen/' + chunk._id,
   })
@@ -21,10 +21,10 @@ exports.addManyDokumen = async (dokumenArray) => {
       const chunk = await chunkModel.create({
         data: dokumen.buffer,
         size: dokumen.size,
-        type: dokumen.mimetype,
       })
       const data = await dokumenModel.create({
         chunk: chunk._id,
+        type: dokumen.mimetype,
         judul: Date.now() + '-' + dokumen.originalname,
         path: process.env.BASE_URL + '/dokumen/' + chunk._id,
       })