const handleError = require('../utils/handleError') const response = require('../utils/responseHandler') const laporanModel = require('../model/laporan.model') const userModel = require('../model/user.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' }, }) 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] 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 pelanggaran = await pelanggaranModel.find({ _id: { $in: pelanggaran_id.split(',').map((e) => e), }, }) 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.split(',').map((e) => e), 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() .populate('user') .populate('pelanggaran') .populate('dokumen') if (!data) { return response.error(res, { message: 'Not Found', code: 404, }) } if (user.role.id !== 2020) { data = data.filter( (e) => e.user.role.id === user.role.id && e.pt.pembina.id === user.lembaga.id ) } 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') if (!data) { return response.error(res, { message: 'Not Found', code: 404, }) } return response.success(res, { message: 'Berhasil ngambil data Laporan', data: user, }) })