yazid138 hace 3 años
padre
commit
9163f215e4

+ 94 - 1
controller/laporan.controller.js

@@ -5,7 +5,8 @@ const laporanModel = require('../model/laporan.model')
 const pelanggaranModel = require('../model/pelanggaran.model')
 const pemantauanModel = require('../model/pemantauan.model')
 const { validate } = require('../utils/validation')
-const { addManyDokumen } = require('../utils/dokumenFunction')
+const { addDokumen, addManyDokumen } = require('../utils/dokumenFunction')
+const userModel = require('../model/user.model')
 const { cekSatuDataLaporan, cekBanyakDataLaporan } = require('../utils/cekData')
 
 exports.create = handleError(async (req, res) => {
@@ -70,6 +71,98 @@ exports.create = handleError(async (req, res) => {
   })
 })
 
+exports.public = handleError(async (req, res) => {
+  const isValid = validate(res, req.body, {
+    nama: 'string',
+    email: 'email',
+    alamat: 'string',
+    no_hp: 'string',
+    no_laporan: 'string',
+    pt_id: 'string',
+    pelanggaran_id: 'string',
+    keterangan: 'string',
+    is_private: { type: 'string', enum: ['true', 'false'] },
+  })
+  if (!isValid) return
+
+  const {
+    no_laporan,
+    pt_id,
+    keterangan,
+    nama,
+    email,
+    alamat,
+    no_hp,
+    is_private,
+  } = req.body
+  let { pelanggaran_id } = req.body
+
+  const pt = await axios.get(
+    `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
+  )
+  if (!pt) {
+    return response.error(res, {
+      message: 'pt_id tidak ditemukan',
+    })
+  }
+
+  const { dokumen, foto } = req.files
+  if (!foto.length) {
+    return response.error(res, {
+      message: 'foto harus ada',
+    })
+  }
+  const foto_id = await addDokumen(foto[0])
+  const user = await userModel.create({
+    nama,
+    email,
+    no_hp,
+    alamat,
+    isPublic: true,
+    isPrivate: is_private === 'true',
+    foto: foto_id,
+  })
+  let dokumen_id = []
+  if (dokumen.length) {
+    const dataDokumen = await addManyDokumen(dokumen)
+    dokumen_id = dataDokumen.map((e) => e._id)
+  }
+
+  pelanggaran_id = pelanggaran_id.split(',')
+  const pelanggaran = await pelanggaranModel.find({
+    _id: {
+      $in: pelanggaran_id,
+    },
+  })
+  if (!pelanggaran.length)
+    return response.error(res, { message: 'pelanggaran_id tidak ada' })
+
+  let data = {
+    no_laporan,
+    user: user._id,
+    dokumen: dokumen_id,
+    pt: pt[0],
+    pelanggaran: pelanggaran_id,
+    keterangan,
+    role_data: 'dikti',
+  }
+
+  data = await laporanModel.create(data)
+  await pemantauanModel.create({
+    laporan: data._id,
+    pt_id: pt[0].id,
+    user: user._id,
+    keterangan: 'Mengajukan Laporan',
+    dokumen: dokumen_id,
+    for_pt: false,
+  })
+
+  return response.success(res, {
+    message: 'Berhasil menambah laporan',
+    data,
+  })
+})
+
 exports.getAll = handleError(async (req, res) => {
   const user = req.user
   const where = {}

+ 43 - 0
controller/pemantauan.controller.js

@@ -3,6 +3,8 @@ const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
 const pemantauanModel = require('../model/pemantauan.model')
 const { cekSatuDataLaporan, cekSatuDataSanksi } = require('../utils/cekData')
+const laporanModel = require('../model/laporan.model')
+const userModel = require('../model/user.model')
 
 exports.get = handleError(async (req, res) => {
   const user = req.user
@@ -51,3 +53,44 @@ exports.getPT = handleError(async (req, res) => {
     data,
   })
 })
+
+exports.public = handleError(async (req, res) => {
+  const { no_hp, no_laporan } = req.query
+  if (!no_hp || !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' })
+    .select(
+      'no_laporan pt.nama keterangan pelanggaran createdAt aktif role_data'
+    )
+  if (!laporan) {
+    return response.error(res, {
+      message: 'laporan tidak ada',
+    })
+  }
+  const data = await pemantauanModel
+    .find({ laporan })
+    .populate({ path: 'user', select: 'nama isPublic role' })
+    .select('user keterangan laporan sanksi')
+    .populate({ path: 'laporan', select: 'no_laporan' })
+    .populate({ path: 'sanksi', select: 'no_sanksi' })
+  return response.success(res, {
+    message: 'tes',
+    data: { laporan, pemantauan: data },
+  })
+})

+ 4 - 1
controller/pt.controller.js

@@ -50,16 +50,19 @@ exports.getOne = handleError(async (req, res) => {
 exports.public = handleError(async (req, res) => {
   const { search } = req.query
   let url = 'https://api.kemdikbud.go.id:8243/pddikti/1.2/pt'
+
   if (search) {
     url += '?'
+    const parseURL = []
     if (search) parseURL.push(`q=${search}`)
+    url += parseURL.join('&')
   }
   let data = await axios.get(url)
   data = data.map((e) => {
     return { id: e.id, nama: e.nama }
   })
   return response.success(res, {
-    message: 'Berhasil mengambil satu data Perguruan Tinggi',
+    message: 'Berhasil mengambil data Perguruan Tinggi',
     data,
   })
 })

+ 1 - 1
model/user.model.js

@@ -11,7 +11,7 @@ module.exports = mongoose.model(
     email: String,
     no_hp: String,
     alamat: String,
-    dokumen: {
+    foto: {
       type: Types.ObjectId,
       ref: dokumen,
     },

+ 8 - 0
routes/v1/public.routes.js

@@ -2,10 +2,18 @@ const router = require('express').Router()
 const user = require('../../controller/user.controller')
 const pt = require('../../controller/pt.controller')
 const pelanggaran = require('../../controller/pelanggaran.controller')
+const laporan = require('../../controller/laporan.controller')
+const pemantauan = require('../../controller/pemantauan.controller')
 const handleDokumen = require('../../utils/handleDokumen')
 
 // router.post('/user/add', handleDokumen.array('dokumen'), user.addUserPublic)
 router.get('/pt', pt.public)
 router.get('/pelanggaran', pelanggaran.public)
+router.get('/pemantauan', pemantauan.public)
+router.post(
+  '/laporan/create',
+  handleDokumen.fields([{ name: 'dokumen' }, { name: 'foto', maxCount: 1 }]),
+  laporan.public
+)
 
 module.exports = router

+ 1 - 1
utils/cekData.js

@@ -19,7 +19,7 @@ exports.cekSatuDataLaporan = async (res, user, laporan_id, where = {}) => {
   }
   const laporan = await laporanModel
     .findOne(w)
-    .populate('user')
+    .populate({ path: 'user', populate: 'foto' })
     .populate({ path: 'pelanggaran', select: 'pelanggaran' })
     .populate('dokumen')
     .populate('evaluasi.dokumen')

+ 6 - 1
utils/dokumenFunction.js

@@ -11,7 +11,12 @@ exports.addDokumen = async (dokumen) => {
     chunk: chunk._id,
     type: dokumen.mimetype,
     judul: Date.now() + '-' + dokumen.originalname,
-    path: process.env.BASE_URL + '/dokumen/' + chunk._id,
+    path:
+      process.env.BASE_URL +
+      '/dokumen/' +
+      chunk._id +
+      '/' +
+      dokumen.originalname,
   })
   return data
 }