yazid138 3 жил өмнө
parent
commit
af05752779

+ 18 - 28
controller/auth.controller.js

@@ -3,14 +3,10 @@ const response = require('../utils/responseHandler')
 const userModel = require('../model/user.model')
 const jwt = require('jsonwebtoken')
 const { validate } = require('../utils/validation')
-const axios = require('axios')
+const axios = require('../utils/axios')
 const qs = require('qs')
-const https = require('https')
 
 exports.login = handleError(async (req, res) => {
-  const httpsAgent = new https.Agent({
-    rejectUnauthorized: false,
-  })
   const isValid = validate(res, req.body, {
     username: 'string',
     password: 'string',
@@ -18,48 +14,42 @@ exports.login = handleError(async (req, res) => {
   if (!isValid) return
 
   const { username, password } = req.body
-  const data = qs.stringify({
-    username,
-    password,
-  })
   const user = await axios.post(
     'https://api.kemdikbud.go.id:8243/manakses/2.0/auth',
-    data,
+    qs.stringify({
+      username,
+      password,
+    }),
     {
-      headers: {
-        Authorization: `Bearer ${process.env.TOKEN}`,
-        'Content-Type': 'application/x-www-form-urlencoded',
-        Accept: 'application/json',
-      },
-      httpsAgent,
+      'Content-Type': 'application/x-www-form-urlencoded',
     }
   )
 
-  if (user.data.code === 400) {
+  if (user.code === 400) {
     return response.error(res, {
       code: 400,
-      message: user.data.message,
+      message: user.message,
     })
   }
 
   const cekUser = await userModel.findOne({
-    user_id: user.data.id,
+    user_id: user.id,
   })
   if (!cekUser) {
     await userModel.create({
-      user_id: user.data.id,
-      nama: user.data.nama,
-      lembaga: user.data.peran[0].organisasi,
-      email: user.data.username,
-      no_hp: user.data.no_hp,
-      alamat: user.data.alamat,
-      role: user.data.peran[0].peran,
+      user_id: user.id,
+      nama: user.nama,
+      lembaga: user.peran[0].organisasi,
+      email: user.username,
+      no_hp: user.no_hp,
+      alamat: user.alamat,
+      role: user.peran[0].peran,
       isPublic: false,
       isPrivate: false,
     })
   }
 
-  const accessToken = jwt.sign({ id: user.data.id }, process.env.SECRET, {
+  const accessToken = jwt.sign({ id: user.id }, process.env.SECRET, {
     expiresIn: '1d',
   })
 
@@ -67,7 +57,7 @@ exports.login = handleError(async (req, res) => {
     message: 'Berhasil Login',
     data: {
       token: `Bearer ${accessToken}`,
-      user: user.data,
+      user,
     },
   })
 })

+ 60 - 0
controller/evaluasi.controller.js

@@ -0,0 +1,60 @@
+const laporanModel = require('../model/laporan.model')
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+const { validate } = require('../utils/validation')
+const { addManyDokumen } = require('../utils/dokumenFunction')
+
+exports.add = handleError(async (req, res) => {
+  const user = req.user
+  const { id } = req.params
+  const isValid = validate(res, req.body, {
+    judul: 'string',
+    tanggal: { type: 'date', convert: true },
+  })
+  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 { judul, tanggal } = req.body
+  const data = await laporanModel.findOneAndUpdate(
+    {
+      _id: id,
+      user: user._id,
+      jadwal: {
+        $exists: true,
+        $ne: null,
+      },
+    },
+    {
+      $push: {
+        evaluasi: {
+          judul,
+          tanggal,
+          dokumen: dokumen_id,
+        },
+      },
+    },
+    {
+      new: true,
+    }
+  )
+
+  if (!data) {
+    return response.error(res, {
+      message: 'id tidak ada',
+      code: 404,
+    })
+  }
+
+  return response.success(res, {
+    message: 'Berhasil tambah evaluasi',
+    data,
+  })
+})

+ 44 - 0
controller/jadwal.controller.js

@@ -0,0 +1,44 @@
+const laporanModel = require('../model/laporan.model')
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+const { validate } = require('../utils/validation')
+
+exports.update = handleError(async (req, res) => {
+  const user = req.user
+  const { id } = req.params
+  const isValid = validate(res, req.body, {
+    judul: 'string',
+    dari_tanggal: { type: 'date', convert: true },
+    sampai_tanggal: { type: 'date', convert: true },
+    warna: 'string',
+  })
+  if (!isValid) return
+
+  const { judul, dari_tanggal, sampai_tanggal, warna } = req.body
+  const data = await laporanModel.findOneAndUpdate(
+    { _id: id, user: user._id },
+    {
+      jadwal: {
+        judul,
+        dari_tanggal,
+        sampai_tanggal,
+        warna,
+      },
+    },
+    {
+      new: true,
+    }
+  )
+
+  if (!data) {
+    return response.error(res, {
+      message: 'id tidak ada',
+      code: 404,
+    })
+  }
+
+  return response.success(res, {
+    message: 'Berhasil ubah jadwal',
+    data,
+  })
+})

+ 22 - 26
controller/laporan.controller.js

@@ -1,53 +1,43 @@
+const axios = require('../utils/axios')
 const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
 const laporanModel = require('../model/laporan.model')
-const userModel = require('../model/user.model')
+const pelanggaranModel = require('../model/pelanggaran.model')
 const { validate } = require('../utils/validation')
-const axios = require('axios')
-const https = require('https')
 const { addManyDokumen } = require('../utils/dokumenFunction')
-const pelanggaranModel = require('../model/pelanggaran.model')
 
 exports.create = handleError(async (req, res) => {
-  const httpsAgent = new https.Agent({
-    rejectUnauthorized: false,
-  })
-  req.body.dokumen = req.files
   const isValid = validate(res, req.body, {
     no_laporan: 'string',
     pt_id: 'string',
     pelanggaran_id: 'string',
     keterangan: 'string',
-    dokumen: { type: 'array', items: 'object' },
+    role_data: { type: 'string', optional: true, enum: ['lldikti', 'dikti'] },
   })
   if (!isValid) return
 
   const { no_laporan, pt_id, keterangan, pelanggaran_id, role_data } = req.body
 
-  const url = `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
-
-  const responseAxios = await axios.get(url, {
-    headers: {
-      Authorization: `Bearer ${process.env.TOKEN}`,
-    },
-    httpsAgent,
-  })
-
-  const pt = responseAxios.data[0]
+  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 = await addManyDokumen(req.files)
-  const dokumen_id = dokumen.map((e) => e._id)
+  const files = req.files
+  let dokumen_id = []
+  if (files.length) {
+    const dokumen = await addManyDokumen(files)
+    dokumen_id = dokumen.map((e) => e._id)
+  }
 
   const pelanggaran = await pelanggaranModel.find({
     _id: {
       $in: pelanggaran_id.split(',').map((e) => e),
     },
   })
-
   if (!pelanggaran.length)
     return response.error(res, { message: 'pelanggaran_id tidak ada' })
 
@@ -73,10 +63,14 @@ exports.create = handleError(async (req, res) => {
 exports.getAll = handleError(async (req, res) => {
   const user = req.user
   let data = await laporanModel
-    .find()
+    .find({ aktif: true })
     .populate('user')
     .populate('pelanggaran')
     .populate('dokumen')
+    .populate('evaluasi.dokumen')
+    .sort({
+      createdAt: -1,
+    })
 
   if (!data) {
     return response.error(res, {
@@ -87,9 +81,10 @@ exports.getAll = handleError(async (req, res) => {
 
   if (user.role.id !== 2020) {
     data = data.filter(
-      (e) =>
-        e.user.role.id === user.role.id && e.pt.pembina.id === user.lembaga.id
+      (e) => e.role_data === 'lldikti' && e.pt.pembina.id === user.lembaga.id
     )
+  } else {
+    data = data.filter((e) => e.role_data === 'dikti')
   }
 
   return response.success(res, {
@@ -106,10 +101,11 @@ exports.getOne = handleError(async (req, res) => {
     .populate('user')
     .populate('pelanggaran')
     .populate('dokumen')
+    .populate('evaluasi.dokumen')
 
   if (!data) {
     return response.error(res, {
-      message: 'Not Found',
+      message: 'Laporan Id tidak ada',
       code: 404,
     })
   }

+ 31 - 0
controller/pt.controller.js

@@ -0,0 +1,31 @@
+const axios = require('../utils/axios')
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+
+exports.getAll = handleError(async (req, res) => {
+  const { search, pembina } = req.query
+  let url = 'https://api.kemdikbud.go.id:8243/pddikti/1.2/pt'
+  if (search || pembina) {
+    url += '?'
+    const parseURL = []
+    if (search) parseURL.push(`q=${search}`)
+    if (pembina) parseURL.push(`pembina=${pembina}`)
+    url += parseURL.join('&')
+  }
+  const data = await axios.get(url)
+  return response.success(res, {
+    message: 'Berhasil mengambil data Perguruan Tinggi',
+    data,
+  })
+})
+
+exports.getOne = handleError(async (req, res) => {
+  const { id } = req.params
+  const data = await axios.get(
+    `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${id}`
+  )
+  return response.success(res, {
+    message: 'Berhasil mengambil satu data Perguruan Tinggi',
+    data,
+  })
+})

+ 4 - 4
middleware/verifyToken.js

@@ -15,8 +15,8 @@ module.exports = (req, res, next) => {
   jwt.verify(token, process.env.SECRET, async (err, data) => {
     if (err)
       return response.error(res, {
-        code: 403,
-        message: 'Ditolak',
+        code: 401,
+        message: 'Unauthorized',
       })
     try {
       const user = await userModel.findOne({ user_id: data.id })
@@ -24,8 +24,8 @@ module.exports = (req, res, next) => {
       next()
     } catch (error) {
       return response.error(res, {
-        code: 403,
-        message: 'Ditolak',
+        code: 401,
+        message: 'Unauthorized',
       })
     }
   })

+ 2 - 2
model/laporan.model.js

@@ -18,7 +18,7 @@ module.exports = mongoose.model(
         enum: ['dikti', 'lldikti'],
         default: 'dikti',
       },
-      status: String,
+      // status: String,
       aktif: { type: Boolean, default: true },
       dokumen: [
         {
@@ -35,8 +35,8 @@ module.exports = mongoose.model(
       evaluasi: [
         new Schema(
           {
-            tanggal: Date,
             judul: String,
+            tanggal: Date,
             dokumen: [
               {
                 type: Types.ObjectId,

+ 4 - 2
routes/v1/index.js

@@ -1,15 +1,17 @@
 const router = require('express').Router()
 const auth = require('../../middleware/verifyToken')
+const roleId = require('../../middleware/role')
 
 router.get('/', (req, res) => {
-  res.json({
+  return res.json({
     message: 'welcome to api v1',
     version: 1,
   })
 })
 
-router.use('/laporan', auth, require('./laporan.routes'))
+router.use('/laporan', auth, roleId([2020, 2021]), require('./laporan'))
 router.use('/public', require('./public.routes'))
 router.use('/auth', require('./auth.routes'))
+router.use('/pt', require('./pt.routes'))
 
 module.exports = router

+ 0 - 15
routes/v1/laporan.routes.js

@@ -1,15 +0,0 @@
-const router = require('express').Router()
-const laporan = require('../../controller/laporan.controller')
-const handleDokumen = require('../../utils/handleDokumen')
-const role = require('../../middleware/role')
-
-router.post(
-  '/create',
-  role([2020, 2021]),
-  handleDokumen.array('dokumen'),
-  laporan.create
-)
-router.get('/', role([2020, 2021]), laporan.getAll)
-router.get('/:id', laporan.getOne)
-
-module.exports = router

+ 7 - 0
routes/v1/laporan/evaluasi.routes.js

@@ -0,0 +1,7 @@
+const router = require('express').Router()
+const evaluasi = require('../../../controller/evaluasi.controller')
+const handleDokumen = require('../../../utils/handleDokumen')
+
+router.post('/add/:id', handleDokumen.array('dokumen'), evaluasi.add)
+
+module.exports = router

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

@@ -0,0 +1,12 @@
+const router = require('express').Router()
+const laporan = require('../../../controller/laporan.controller')
+const handleDokumen = require('../../../utils/handleDokumen')
+
+router.post('/create', handleDokumen.array('dokumen'), laporan.create)
+router.get('/', laporan.getAll)
+router.get('/:id', laporan.getOne)
+
+router.use('/jadwal', require('./jadwal.routes'))
+router.use('/evaluasi', require('./evaluasi.routes'))
+
+module.exports = router

+ 6 - 0
routes/v1/laporan/jadwal.routes.js

@@ -0,0 +1,6 @@
+const router = require('express').Router()
+const jadwal = require('../../../controller/jadwal.controller')
+
+router.put('/update/:id', jadwal.update)
+
+module.exports = router

+ 7 - 0
routes/v1/pt.routes.js

@@ -0,0 +1,7 @@
+const router = require('express').Router()
+const pt = require('../../controller/pt.controller')
+
+router.get('/', pt.getAll)
+router.get('/:id', pt.getOne)
+
+module.exports = router

+ 29 - 0
utils/axios.js

@@ -0,0 +1,29 @@
+const axios = require('axios')
+const https = require('https')
+
+exports.get = async (url) => {
+  const response = await axios.get(url, {
+    headers: {
+      Authorization: `Bearer ${process.env.TOKEN}`,
+      Accept: 'application/json',
+    },
+    httpsAgent: new https.Agent({
+      rejectUnauthorized: false,
+    }),
+  })
+  return response.data
+}
+
+exports.post = async (url, data, config) => {
+  const response = await axios.post(url, data, {
+    headers: {
+      Authorization: `Bearer ${process.env.TOKEN}`,
+      Accept: 'application/json',
+      ...config,
+    },
+    httpsAgent: new https.Agent({
+      rejectUnauthorized: false,
+    }),
+  })
+  return response.data
+}