pddikti.service.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. const axios = require('../../utils/axios')
  2. const coba = require('../../utils/coba')
  3. const qs = require('qs')
  4. const { PRODUCTION } = require('../../utils/constanta')
  5. const { logInfo, logError } = require('../../utils/logger')
  6. /**
  7. *
  8. * @param id
  9. * @param query
  10. * @returns {Promise<*>}
  11. */
  12. exports.getPT = (id, query = {}) => {
  13. let token
  14. let url = 'https://api.kemdiktisaintek.go.id:8243/pddikti/1.2/pt'
  15. if (coba.decrypt(process.env.CXQSB) === PRODUCTION) {
  16. url = 'https://api2.kemdiktisaintek.go.id/pddikti-sidali/pt'
  17. token = coba.decrypt(process.env.BEAT2)
  18. }
  19. const { search, pembina } = query
  20. if (id) url += '/' + id
  21. if (Object.keys(query).length) {
  22. url += '?'
  23. const parseUrl = []
  24. if (search) parseUrl.push(`q=${search}`)
  25. if (pembina) parseUrl.push(`pembina=${pembina}`)
  26. url += parseUrl.join('&')
  27. }
  28. return axios.get(url, token)
  29. }
  30. /**
  31. *
  32. * @param id
  33. * @param query
  34. * @returns {Promise<*>}
  35. */
  36. exports.getPembina = (id, query = {}) => {
  37. let token
  38. let url = 'https://api.kemdiktisaintek.go.id:8243/pddikti/1.2/lembaga-non-sp'
  39. if (coba.decrypt(process.env.CXQSB) === PRODUCTION) {
  40. url = 'https://api2.kemdiktisaintek.go.id/pddikti/1.2/lembaga-non-sp'
  41. token = coba.decrypt(process.env.BEAT2)
  42. }
  43. const { search } = query
  44. if (Object.keys(query).length) {
  45. url += '?'
  46. const parseURL = []
  47. if (search) parseURL.push(`q=${search}`)
  48. url += parseURL.join('&')
  49. }
  50. return axios.get(url, token)
  51. }
  52. const loginDev = ({ username, password }) =>
  53. new Promise((resolve) => {
  54. const data = [
  55. {
  56. id: '28DB23AE-2976-47E0-9410-241A11EE1F88',
  57. username: 'rizqevo@outlook.com',
  58. password: 'kmnjhbvg',
  59. peran: [
  60. {
  61. peran: {
  62. id: 2027,
  63. },
  64. },
  65. ],
  66. },
  67. {
  68. id: '52D3FB82-1578-498E-9C09-3AE13E4DBC61',
  69. username: 'sugiyanto@gmail.com',
  70. password: 'qwerty',
  71. peran: [
  72. {
  73. peran: {
  74. id: 2024,
  75. },
  76. },
  77. ],
  78. },
  79. {
  80. id: '447C71BC-37F8-4D14-94AD-548E6B19400F',
  81. username: 'sugiyanti@gmail.com',
  82. password: 'asdfgh',
  83. peran: [
  84. {
  85. peran: {
  86. id: 2025,
  87. },
  88. },
  89. ],
  90. },
  91. {
  92. id: '03B042F2-68EA-44AD-BA07-3E0B4E07F7E8',
  93. username: 'satyagama@gmail.com',
  94. password: 'zxcvbn',
  95. peran: [
  96. {
  97. peran: {
  98. id: 2026,
  99. },
  100. },
  101. ],
  102. },
  103. ]
  104. const user = data.find(
  105. (e) => e.username === username && e.password === password
  106. )
  107. if (user) {
  108. resolve(user)
  109. } else {
  110. resolve({
  111. code: 400,
  112. message: 'Username atau password salah',
  113. })
  114. }
  115. })
  116. /**
  117. *
  118. * @param username
  119. * @param password
  120. * @returns {Promise<*>}
  121. */
  122. exports.login = ({ username, password }) => {
  123. let token
  124. const domain = 'api2.kemdiktisaintek.go.id'
  125. let url = `https://${domain}:8243/manakses/2.0/auth`
  126. if (coba.decrypt(process.env.CXQSB) === PRODUCTION) {
  127. url = `https://${domain}/manakses/2.0/auth`
  128. token = coba.decrypt(process.env.AFA1T)
  129. } else {
  130. // return loginDev({ username, password })
  131. }
  132. return axios.post(
  133. url,
  134. qs.stringify({
  135. username,
  136. password,
  137. }),
  138. token,
  139. {
  140. 'Content-Type': 'application/x-www-form-urlencoded',
  141. }
  142. )
  143. }
  144. /**
  145. *
  146. * @param ptKode
  147. * @param noSanksi
  148. * @param fromDate
  149. * @param pelanggaran
  150. * @param terimaSanksi
  151. * @returns {Promise<*>}
  152. */
  153. exports.updatePDDIKTI = ({
  154. ptKode,
  155. noSanksi,
  156. fromDate,
  157. levelSanksi,
  158. terimaSanksi,
  159. }) => {
  160. let token
  161. let url = `https://api.kemdiktisaintek.go.id:8243/pddikti/1.2/pt/${ptKode}/sanksi`
  162. if (coba.decrypt(process.env.CXQSB) === PRODUCTION) {
  163. url = `https://api2.kemdiktisaintek.go.id/pddikti/1.2/pt/${ptKode}/sanksi`
  164. token = coba.decrypt(process.env.BEAT2)
  165. }
  166. return axios.post(
  167. url,
  168. {
  169. noSanksi: noSanksi,
  170. tmtBerlaku: fromDate,
  171. tstBerlaku: terimaSanksi,
  172. idJenisSanksi: levelSanksi,
  173. alasan: 'Penetapan sanksi',
  174. },
  175. token
  176. )
  177. }
  178. /**
  179. *
  180. * @param templateId
  181. * @param data
  182. * @param contacts
  183. * @param buttons
  184. * @returns {Promise<*>}
  185. */
  186. exports.whatsapp = async (templateId, contacts, data, buttons = []) => {
  187. let token
  188. let url = 'https://api.kemdiktisaintek.go.id:8243/qontak/1.0/send'
  189. if (coba.decrypt(process.env.CXQSB) === PRODUCTION) {
  190. url = 'https://api2.kemdiktisaintek.go.id/qontak/1.0/send'
  191. token = coba.decrypt(process.env.R3AOP)
  192. }
  193. const payload = {
  194. templateId,
  195. contacts,
  196. body: data,
  197. buttons: buttons.map((e, index) => ({ ...e, index })),
  198. }
  199. logInfo('WA_SEND', 'Attempting to send WA message', { url, templateId, contactsCount: contacts.length, contacts })
  200. try {
  201. const res = await axios.post(url, payload, token)
  202. logInfo('WA_SEND', 'WA message sent successfully', { templateId, response: res })
  203. return res
  204. } catch (error) {
  205. logError('WA_SEND', 'Failed to send WA message', {
  206. templateId,
  207. error: error.message,
  208. response: error.response?.data || null,
  209. status: error.response?.status || null
  210. })
  211. throw error
  212. }
  213. }