user.controller.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. const handleError = require('../../utils/v1/handleError')
  2. const response = require('../../utils/responseHandler')
  3. const userModel = require('../../model/user.model')
  4. const { validate } = require('../../utils/v1/validation')
  5. const { notifWA2 } = require('../../utils/v1/notifFunction')
  6. const { addDokumen } = require('../../utils/dokumenFunction')
  7. const jwt = require('jsonwebtoken')
  8. const { TEMPLATE_VERIFIKASI, TRUE, FALSE } = require('../../utils/constanta')
  9. const pddiktiService = require('../../services/v2/pddikti.service')
  10. exports.addUserPublic = handleError(async (req, res) => {
  11. const { no_laporan, pt_id, nama, email, no_hp, alamat, is_private, isVerify } = req.body
  12. const isValid = validate(res, req.body, {
  13. no_laporan: 'string',
  14. pt_id: 'string',
  15. is_private: { type: 'string', enum: [TRUE, FALSE] },
  16. })
  17. if (!isValid) return
  18. const pt = await pddiktiService.getPT(pt_id)
  19. if (pt.length === 0)
  20. return response.error(res, {
  21. message: 'pt_id tidak ditemukan',
  22. })
  23. let foto_id = null
  24. const foto = req.file
  25. if (foto) {
  26. foto_id = await addDokumen(foto)
  27. }
  28. let no_hp2 = null
  29. let no_verifikasi = null
  30. if (no_hp) {
  31. no_hp2 = no_hp.substring(0, 1) === '0' ? '62' + no_hp.substring(1) : no_hp
  32. no_verifikasi = Math.floor(Math.random() * 1000000)
  33. }
  34. let level = 1
  35. if (
  36. no_laporan &&
  37. pt_id &&
  38. nama &&
  39. email &&
  40. no_hp &&
  41. alamat &&
  42. is_private &&
  43. foto_id
  44. ) {
  45. level = 3
  46. }
  47. const user = await userModel.create({
  48. nama,
  49. email,
  50. no_hp,
  51. alamat,
  52. isPublic: true,
  53. isPrivate: is_private === TRUE,
  54. foto: foto_id,
  55. no_verifikasi,
  56. verified: false,
  57. })
  58. let notif = null
  59. if (isVerify !== FALSE && no_hp) {
  60. notifWA2(
  61. TEMPLATE_VERIFIKASI,
  62. { nama: nama || 'rahasia', no_hp: no_hp2 },
  63. [
  64. { key: '1', value: 'pt', value_text: pt[0].nama },
  65. { key: '3', value: 'no_verifikasi', value_text: no_verifikasi },
  66. { key: '2', value: 'no_laporan', value_text: no_laporan },
  67. ]
  68. ).catch()
  69. }
  70. const accessToken = jwt.sign(
  71. {
  72. _id: user._id,
  73. no_laporan,
  74. level,
  75. },
  76. process.env.SRU51,
  77. {
  78. expiresIn: '30m',
  79. }
  80. )
  81. data = {
  82. token: `Bearer ${accessToken}`,
  83. }
  84. return response.success(res, {
  85. data,
  86. message: 'Berhasil menambah user',
  87. })
  88. })
  89. exports.get = handleError((req, res) => {
  90. const user = req.user
  91. return response.success(res, {
  92. message: 'Berhasil mengambil data user',
  93. data: user,
  94. })
  95. })