const axios = require('../utils/axios') const handleError = require('../utils/handleError') const response = require('../utils/responseHandler') const laporanModel = require('../model/laporan.model') const pelanggaranModel = require('../model/pelanggaran.model') const { validate } = require('../utils/validation') const { addManyDokumen } = require('../utils/dokumenFunction') exports.create = handleError(async (req, res) => { const isValid = validate(res, req.body, { no_laporan: 'string', pt_id: 'string', pelanggaran_id: 'string', keterangan: 'string', role_data: { type: 'string', optional: true, enum: ['lldikti', 'dikti'] }, }) if (!isValid) return const { no_laporan, pt_id, keterangan, role_data } = 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 files = req.files let dokumen_id = [] if (files.length) { const dokumen = await addManyDokumen(files) dokumen_id = dokumen.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' }) const user = req.user let data = { no_laporan, user: user._id, dokumen: dokumen_id, pt, pelanggaran: pelanggaran_id, keterangan, } if (role_data) data.role_data = role_data data = await laporanModel.create(data) return response.success(res, { message: 'Berhasil menambah laporan', data, }) }) exports.getAll = handleError(async (req, res) => { const user = req.user let data = await laporanModel .find({ aktif: true }) .populate('user') .populate('pelanggaran') .populate('dokumen') .populate('evaluasi.dokumen') .sort({ createdAt: -1, }) if (!data) { return response.error(res, { message: 'Not Found', code: 404, }) } if (user.role.id !== 2020) { data = data.filter( (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, { message: '', data, }) }) exports.getOne = handleError(async (req, res) => { const { id } = req.params const user = req.user const data = await laporanModel .findOne({ _id: id, user: user._id }) .populate('user') .populate('pelanggaran') .populate('dokumen') .populate('evaluasi.dokumen') if (!data) { return response.error(res, { message: 'Laporan Id tidak ada', code: 404, }) } return response.success(res, { message: 'Berhasil ngambil data Laporan', data: user, }) })