yazid138 1 year ago
parent
commit
1f448d29ea
4 changed files with 142 additions and 0 deletions
  1. 102 0
      controller/v1/signature.controller.js
  2. 29 0
      model/signature.model.js
  3. 1 0
      routes/v1/index.js
  4. 10 0
      routes/v1/signature.routes.js

+ 102 - 0
controller/v1/signature.controller.js

@@ -0,0 +1,102 @@
+const handleError = require('../../utils/v1/handleError')
+const response = require('../../utils/responseHandler')
+const laporanModel = require('../../model/laporan.model')
+const { validate } = require('../../utils/v1/validation')
+const signatureModel = require('../../model/signature.model')
+const { addDokumen } = require('../../utils/dokumenFunction')
+const { cekSatuDataLaporan } = require('../../utils/v1/cekData')
+
+exports.getPeserta = handleError(async (req, res) => {
+  const { laporan_id } = req.params
+  const data = await signatureModel.findOne({ laporan_id }).populate('daftar_kehadiran_peserta.ttd')
+  return response.success(res, {
+    message: 'Berhasil mendapatkan daftar kehadiran peserta',
+    data
+  })
+})
+
+exports.addPeserta = handleError(async (req, res) => {
+  const isValid = validate(res, req.body, {
+    laporan_id: 'string',
+    nama: 'string'
+  })
+  if (!isValid) return
+
+  const { laporan_id, nama } = req.body
+
+  const laporan = await laporanModel.findOne({
+    _id: laporan_id
+  })
+  if (!laporan) return response.error(res, {
+    code: 404,
+    message: 'laporan_id tidak ada'
+  })
+
+  const file = req.file
+  if (!file) {
+    return response.error(res, {
+      message: 'ttd harus ada'
+    })
+  }
+  const dokumen = await addDokumen(file)
+
+  const signature = await signatureModel.findOne({ laporan_id: laporan._id })
+  if (!signature) {
+    await signatureModel.create(
+      {
+        laporan_id: laporan._id,
+        daftar_kehadiran_peserta: [{
+          nama,
+          ttd: dokumen.id
+        }]
+      }
+    )
+  } else {
+    await signatureModel.findOneAndUpdate(
+      { laporan_id: laporan._id },
+      {
+        $push: {
+          daftar_kehadiran_peserta: {
+            nama,
+            ttd: dokumen.id
+          }
+        }
+      }
+    )
+  }
+
+  return response.success(res, {
+    message: 'Berhasil tambah peserta pleno'
+  })
+})
+
+exports.removePeserta = handleError(async (req, res) => {
+  const isValid = validate(res, req.body, {
+    peserta_id: 'string',
+    laporan_id: 'string'
+  })
+  if (!isValid) return
+  const user = req.user
+
+  const { laporan_id, peserta_id } = req.body
+
+  const laporan = await cekSatuDataLaporan(res, user, laporan_id, {
+    evaluasi: { $exists: true, $ne: [] }
+  })
+  if (!laporan) return
+
+  await signatureModel.findOneAndUpdate(
+    { laporan_id: laporan._id },
+    {
+      $pull: {
+        daftar_kehadiran_peserta: {
+          _id: peserta_id
+        }
+      }
+    }
+  )
+
+  return response.success(res, {
+    message: 'Berhasil menghapus peserta pleno'
+  })
+})

+ 29 - 0
model/signature.model.js

@@ -0,0 +1,29 @@
+const mongoose = require('mongoose')
+const { Schema,Types } = mongoose
+const dokumen = require('./dokumen.model')
+const laporan = require('./laporan.model')
+
+module.exports = mongoose.model(
+  'Signature',
+  new Schema({
+    laporan_id: {
+      type: Types.ObjectId,
+      ref: laporan,
+    },
+    daftar_kehadiran_peserta: [
+      new Schema(
+        {
+          nama: String,
+          ttd: {
+            type: Types.ObjectId,
+            ref: dokumen,
+          },
+        },
+        {
+          timestamps: true
+        }
+      )
+    ],
+  }),
+  'signature'
+)

+ 1 - 0
routes/v1/index.js

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

+ 10 - 0
routes/v1/signature.routes.js

@@ -0,0 +1,10 @@
+const router = require('express').Router()
+const signature = require('../../controller/v1/signature.controller')
+const auth = require('../../middleware/verifyToken')
+const handleDokumen = require('../../utils/handleDokumen')
+
+router.get('/:laporan_id', auth, signature.getPeserta)
+router.post('/', handleDokumen.single('ttd'), signature.addPeserta)
+router.delete('/', auth, signature.removePeserta)
+
+module.exports = router