user.controller.js 2.5 KB

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