user.controller.js 2.6 KB

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