perbaikan.controller.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const handleError = require('../../utils/handleError')
  2. const sanksiModel = require('../../model/sanksi.model')
  3. const { addManyDokumen } = require('../../utils/dokumenFunction')
  4. const { validate } = require('../../utils/validation')
  5. const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../../utils/cekData')
  6. const response = require('../../utils/responseHandler')
  7. exports.add = handleError(async (req, res) => {
  8. const user = req.user
  9. const { laporan_id, sanksi_id } = req.query
  10. if (!laporan_id || !sanksi_id) {
  11. return response.error(res, {
  12. message: 'query laporan_id atau sanksi_id harus ada',
  13. })
  14. }
  15. const laporan = await cekSatuDataLaporan(res, user, laporan_id)
  16. const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
  17. if (!laporan || !sanksi) return
  18. const isValid = validate(res, req.body, {
  19. keterangan: 'string',
  20. })
  21. if (!isValid) return
  22. const files = req.files
  23. if (!files?.length) {
  24. return response.error(res, {
  25. message: 'dokumen harus ada',
  26. })
  27. }
  28. const dokumen = await addManyDokumen(files)
  29. const dokumen_id = dokumen.map((e) => e._id)
  30. const { keterangan } = req.body
  31. const data = await sanksiModel.findOneAndUpdate(
  32. {
  33. laporan: laporan._id,
  34. _id: sanksi._id,
  35. $or: [
  36. { ['pengajuan.banding']: { $exists: true, $ne: null } },
  37. { ['pengajuan.cabut_sanksi']: { $exists: true, $ne: null } },
  38. ],
  39. },
  40. {
  41. $push: {
  42. perbaikan: {
  43. keterangan,
  44. dokumen: dokumen_id,
  45. },
  46. },
  47. }
  48. )
  49. if (!data) {
  50. return response.error(res, {
  51. message: 'Pengajuan banding atau cabut sanksi tidak ada',
  52. })
  53. }
  54. return response.success(res, {
  55. data,
  56. message: 'Berhasil menambah Perbaikan',
  57. })
  58. })