admin/modules/user.js

  1. /* ============================================================================ *\
  2. || ########################################################################## ||
  3. || # Auction Software Marketplace Release: 0.6 Build 0.7 # ||
  4. || # ---------------------------------------------------------------------- # ||
  5. || # License # 35YAHCNR9344X6O666C123AB # ||
  6. || # ---------------------------------------------------------------------- # ||
  7. || # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved # ||
  8. || # This file may not be redistributed in whole or significant part. # ||
  9. || # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
  10. || # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com # ||
  11. || # ---------------------------------------------------------------------- # ||
  12. || ########################################################################## ||
  13. \* ============================================================================ */
  14. const dateFormat = require('dateformat')
  15. const md5 = require('md5')
  16. const _ = require('underscore')
  17. const moment = require('moment')
  18. const commonSQL = require('../../common/sql').default
  19. const commonProduct = require('../../common/products').default
  20. const mysqclass = require('./mysqli').default
  21. /**
  22. * @class class to handle user functions
  23. */
  24. class adminUserModule {
  25. /**
  26. * Fetch All Buyers
  27. * @param {object} req request data
  28. * @param {string} count count for the pagination
  29. * @returns {object} sql response
  30. */
  31. static async fetchBuyersAll(req, count) {
  32. const mysql = {}
  33. const { action } = req.body
  34. const baseTableUsed = global.configColumns.users
  35. const customTableUsed = global.configColumns.custom_users
  36. let row = ''
  37. let where = ''
  38. let limitf = ''
  39. let order = ''
  40. const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
  41. if (typeof req.body.limit === 'undefined') {
  42. req.body.limit = global.configurations.variables.search_limit || 25
  43. }
  44. if (typeof req.body.page === 'undefined') {
  45. req.body.page = 1
  46. }
  47. order = `order by u.id desc`
  48. if (req.body.orderby || req.body.order) {
  49. const sortReturn = commonProduct.sortOrderData(req, where)
  50. if (sortReturn.order) {
  51. order = sortReturn.order
  52. }
  53. if (sortReturn.where) {
  54. where += sortReturn.where
  55. }
  56. }
  57. if (req.body.similars) {
  58. where += commonProduct.similarData(req)
  59. }
  60. if (req.body.filters) {
  61. where += commonProduct.filterData(req)
  62. }
  63. const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
  64. 'id',
  65. ])
  66. mysql.customTableJoin = generatedData.customTableJoin
  67. mysql.columns = generatedData.rowstoFetch
  68. if (
  69. global.configColumns.third_payment_north &&
  70. global.configColumns.third_payment_north.enabled === 1
  71. ) {
  72. const additionalTable2 = global.configColumns.third_payment_north
  73. const customAdditionalTable2 = { enabled: 0 }
  74. const additionalGeneratedData2 = commonProduct.additionalTableJoin(
  75. additionalTable2,
  76. customAdditionalTable2,
  77. baseTableUsed,
  78. 'left join',
  79. 'user_id',
  80. 'id',
  81. )
  82. mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData2.customTableJoin} `
  83. mysql.columns = mysql.columns.concat(additionalGeneratedData2.rowstoFetch)
  84. }
  85. row = count === 1 ? 'get_all_buyers_limit' : 'get_all_buyers'
  86. const limitrg = req.body.limit
  87. let uidc = 0
  88. if (req.user) {
  89. uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
  90. }
  91. const escapeData = []
  92. if (count === 1) {
  93. let pagen = (req.body.page - 1) * limitrg
  94. if (parseInt(pagen, 10) < 0) {
  95. pagen = 0
  96. }
  97. limitf = ` limit ${pagen},${limitrg}`
  98. }
  99. mysql.order = order
  100. mysql.where = where
  101. mysql.limitf = limitf
  102. mysql.dateNow = dateNow
  103. const strQuery = await mysqclass.mysqli(mysql, row)
  104. const dataReturn = await global.mysql.query(strQuery, escapeData)
  105. return dataReturn
  106. }
  107. /**
  108. * Fetch Bidding buyers All
  109. * @param {object} req request data
  110. * @returns {object} sql response
  111. */
  112. static async fetchBiddingBuyersAll(req) {
  113. const mysql = {}
  114. let row = ''
  115. let where = ''
  116. let order = ''
  117. const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
  118. order = `order by u.id desc`
  119. if (req.body.orderby || req.body.order) {
  120. const sortReturn = commonProduct.sortOrderData(req, where)
  121. if (sortReturn.order) {
  122. order = sortReturn.order
  123. }
  124. if (sortReturn.where) {
  125. where += sortReturn.where
  126. }
  127. }
  128. if (req.body.similars) {
  129. where += commonProduct.similarData(req)
  130. }
  131. if (req.body.filters) {
  132. where += commonProduct.filterData(req)
  133. }
  134. mysql.columns = ['id', 'email', 'first_name', 'last_name']
  135. row = 'get_all_bidding_buyers'
  136. const escapeData = []
  137. mysql.order = order
  138. mysql.where = where
  139. mysql.dateNow = dateNow
  140. const strQuery = await mysqclass.mysqli(mysql, row)
  141. const dataReturn = await global.mysql.query(strQuery, escapeData)
  142. return dataReturn
  143. }
  144. /**
  145. * Fetch Single User
  146. * @param {number} pid User ID which details has to be fetched
  147. * @returns {object} sql response
  148. */
  149. static async fetchUsersbyID(pid) {
  150. const mysql = {}
  151. const escapeData = [pid]
  152. const strQuery = await mysqclass.mysqli(mysql, 'get_single_user_buyer')
  153. const dataReturn = await global.mysql.query(strQuery, escapeData)
  154. return dataReturn
  155. }
  156. /**
  157. * Check Email Exists
  158. * @param {string} nameID Email which has to be checked for unique
  159. * @returns {object} sql response
  160. */
  161. static async checkEmailExisting(nameID) {
  162. const mysql = {}
  163. const escapeData = [nameID]
  164. const strQuery = await mysqclass.mysqli(mysql, 'check_email_exists')
  165. const data = await global.mysql.query(strQuery, escapeData)
  166. return data
  167. }
  168. /**
  169. * User Operation to update or insert
  170. * @param {object} req req object
  171. * @returns {object} sql response
  172. */
  173. static async userOperation(req) {
  174. const mysql = {}
  175. const postData = req.body
  176. const acceptedObjects = [
  177. 'first_name',
  178. 'last_name',
  179. 'address1',
  180. 'status',
  181. 'email',
  182. 'password_hash',
  183. 'password_salt',
  184. 'phone',
  185. 'city',
  186. 'state',
  187. 'zip',
  188. ]
  189. let escapeData = []
  190. let row = ''
  191. if (req.body.id) {
  192. const defaultKeys = ['updated_at']
  193. const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
  194. const valueInsert = commonSQL.updateSQLFunction(
  195. postData,
  196. acceptedObjects,
  197. defaultKeys,
  198. defaultValues,
  199. )
  200. mysql.keys = valueInsert.keys
  201. escapeData = valueInsert.escapeData
  202. row = 'update_on_users'
  203. mysql.user_id = req.body.id
  204. } else {
  205. req.body.password_salt = '12345'
  206. req.body.password_hash = md5(md5(req.body.password) + req.body.password_salt)
  207. const defaultKeys = ['created_at']
  208. const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
  209. const valueInsert = commonSQL.InsertSQLFunction(
  210. postData,
  211. acceptedObjects,
  212. defaultKeys,
  213. defaultValues,
  214. )
  215. mysql.keys = valueInsert.keys
  216. escapeData = valueInsert.escapeData
  217. row = 'insert_into_users'
  218. }
  219. const strQuery = await mysqclass.mysqli(mysql, row)
  220. const data = await global.mysql.query(strQuery, escapeData)
  221. return data
  222. }
  223. /**
  224. * Manual insert notification
  225. * @param {number} uid user ID which notification has to be added
  226. * @returns {object} sql response
  227. */
  228. static async manualInsertUsernotify(uid) {
  229. const mysql = {}
  230. const escapeData = [uid]
  231. const strQuery = await mysqclass.mysqli(mysql, 'insert_into_notification')
  232. const data = await global.mysql.query(strQuery, escapeData)
  233. return data
  234. }
  235. /**
  236. * Update user status
  237. * @param {string} status status which has to be updated
  238. * @param {number} uid user ID where status to be updated
  239. * @returns {object} sql response
  240. */
  241. static async userStatusUpdate(status, pid) {
  242. const mysql = {}
  243. const escapeData = [status, pid]
  244. const strQuery = await mysqclass.mysqli(mysql, 'user_change_market_status')
  245. const dataReturn = await global.mysql.query(strQuery, escapeData)
  246. console.log('dataReturn', strQuery, escapeData)
  247. return dataReturn
  248. }
  249. /**
  250. * Create a user insert query
  251. * @param {object} req request data
  252. * @param {object} data request.body data
  253. * @param {string} baseTableUsed baseTable which the query has to be generated
  254. * @returns {object} sql response
  255. */
  256. static async createuserlist(req, data, baseTableUsed) {
  257. const mysqli = {}
  258. let escapeData = []
  259. const postData = data
  260. const acceptedObjects = baseTableUsed.array_columns
  261. const defaultKeys = ['created_at', 'updated_at']
  262. const defaultValues = [
  263. dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
  264. dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
  265. ]
  266. const valueInsert = commonSQL.InsertSQLFunction(
  267. postData,
  268. acceptedObjects,
  269. defaultKeys,
  270. defaultValues,
  271. )
  272. mysqli.keys = valueInsert.keys
  273. escapeData = valueInsert.escapeData
  274. mysqli.values = valueInsert.values
  275. mysqli.tables = baseTableUsed.ext_name
  276. const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
  277. const dataPromise = await global.mysql.query(strQuery, escapeData)
  278. return dataPromise
  279. }
  280. /**
  281. * Update query for the users
  282. * @param {object} req request data
  283. * @param {object} data request.body data
  284. * @param {string} baseTableUsed baseTable which the query has to be generated
  285. * @returns {object} sql response
  286. */
  287. static async updatealltypeofuser(req, data, proid, typeoffield, baseTableUsed) {
  288. const mysqli = {}
  289. let escapeData = []
  290. const postData = data
  291. const postID = proid
  292. const fieldType = typeoffield
  293. const acceptedObjects = baseTableUsed.array_columns
  294. const defaultKeys = ['updated_at']
  295. const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
  296. const valueInsert = commonSQL.updateSQLFunction(
  297. postData,
  298. acceptedObjects,
  299. defaultKeys,
  300. defaultValues,
  301. )
  302. mysqli.keys = valueInsert.keys
  303. escapeData = valueInsert.escapeData
  304. mysqli.values = ` ${fieldType}=${postID}`
  305. mysqli.tables = baseTableUsed.ext_name
  306. const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
  307. const dataPromise = await global.mysql.query(strQuery, escapeData)
  308. return dataPromise
  309. }
  310. /**
  311. * Select query to fetch all users
  312. * @param {object} data request.body data
  313. * @param {string} baseTableUsed baseTable which the query has to be generated
  314. * @returns {object} sql response
  315. */
  316. static async commonselectparenttable(data, proid, baseid, baseTableUsed) {
  317. const mysqli = {}
  318. const escapeData = [proid]
  319. mysqli.keys = data
  320. mysqli.values = `${baseid} IN (?)`
  321. mysqli.tables = baseTableUsed.ext_name
  322. mysqli.group_by = ''
  323. mysqli.order_by = ''
  324. mysqli.limit_by = ''
  325. const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
  326. const dataReturn = await global.mysql.query(strQuery, escapeData)
  327. return dataReturn
  328. }
  329. /**
  330. * Get particula table details
  331. * @param {object} data request.body data
  332. * @param {string} fieldType fieldType
  333. * @param {number} postID post ID
  334. * @param {string} baseTableUsed baseTable which the query has to be generated
  335. * @param {number} limit limt the table retrive records
  336. * @returns {object} sql response
  337. */
  338. static async getparticulartabledetails(data, fieldType, postID, baseTableUsed, limit) {
  339. const mysqli = {}
  340. const escapeData = []
  341. mysqli.keys = data
  342. mysqli.values = ` ${fieldType}="${postID}"`
  343. mysqli.tables = baseTableUsed
  344. mysqli.group_by = ''
  345. mysqli.order_by = ''
  346. if (limit > 0) {
  347. mysqli.limit_by = ` limit ${limit}`
  348. } else {
  349. mysqli.limit_by = ''
  350. }
  351. const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
  352. const dataReturn = await global.mysql.query(strQuery, escapeData)
  353. return dataReturn
  354. }
  355. }
  356. module.exports.default = adminUserModule