/* ============================================================================ *\
|| ########################################################################## ||
|| # Auction Software Marketplace Release: 0.6 Build 0.7 # ||
|| # ---------------------------------------------------------------------- # ||
|| # License # 35YAHCNR9344X6O666C123AB # ||
|| # ---------------------------------------------------------------------- # ||
|| # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved # ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
|| # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com # ||
|| # ---------------------------------------------------------------------- # ||
|| ########################################################################## ||
\* ============================================================================ */
/* eslint-disable prefer-destructuring */
/* eslint-disable no-param-reassign */
const jwt = require('jsonwebtoken')
const md5 = require('md5')
const adminUserModule = require('../../modules/user').default
const schemaModule = require('./schema').default
const commonFunction = require('../../../common/function').default
const { jsonResponse, errorResponse } = require('../logger')
const userTableAction = async (req) => {
req.body.id = commonFunction.getValidID(req.body.id)
const baseTableUsed = global.configColumns.users
const customTableUsed = global.configColumns.custom_users
const [results] = await Promise.all([
commonFunction.tableFunction(req, baseTableUsed, customTableUsed),
])
return results
}
const userMaxBidMailTrigger = async (req) => {
req.body.filters = {
id: {
value: req.body.id,
type: 'array',
field: 'u.id',
},
}
let [records] = await Promise.all([adminUserModule.fetchBuyersAll(req, 1)])
await commonFunction.asyncForEach(records, async (user) => {
await Promise.all([
commonFunction.eventTriggerFuction(
{
username: `${user.first_name || ''} ${user.last_name || ''}`,
maxbid: req.body.max_bid,
},
user.email,
'',
'maxbid_limit_accepted',
1,
0,
0,
),
])
})
return false
}
module.exports = {
/**
* Get All Users
*
* @memberOf adminside.user
* @param {adminUserModule.fetchBuyersAll} modules
*/
allbuyers: async (req, res) => {
req.body.action = typeof req.body.action === 'undefined' ? 'open' : req.body.action
let records = []
let totalRecords = []
let activelots = []
try {
;[records, totalRecords, activelots] = await Promise.all([
adminUserModule.fetchBuyersAll(req, 1),
adminUserModule.fetchBuyersAll(req, 0),
])
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
let responseData = { records, totalRecords, activelots }
responseData = await commonFunction.getdynamicinnercontents(req, responseData)
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData,
})
}
},
/**
* All bidding buyers
*
* @memberOf adminside.user
* @param {adminUserModule.fetchUsersbyID} modules
*/
allbiddingbuyers: async (req, res) => {
req.body.action = typeof req.body.action === 'undefined' ? 'open' : req.body.action
let records = []
try {
;[records] = await Promise.all([adminUserModule.fetchBiddingBuyersAll(req)])
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
const responseData = { records }
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData,
})
}
},
/**
* Get Singer User
*
* @memberOf adminside.user
* @param {adminUserModule.fetchUsersbyID} modules
*/
getSingleUser: async (req, res) => {
let record = {}
try {
const id = typeof req.body.id === 'undefined' ? '' : req.body.id
const [records] = await Promise.all([adminUserModule.fetchUsersbyID(id)])
record = records[0]
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
const responseData = { record }
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData,
})
}
},
/**
* User Action
*
* @memberOf adminside.user
* @param {adminUserModule.checkEmailExisting} modules
* @param {adminUserModule.userOperation} modules
* @param {adminUserModule.manualInsertUsernotify} modules
*/
userAction: async (req, res) => {
try {
req.body.id =
typeof req.body.id === 'undefined' || req.body.id === 0 || req.body.id === ''
? null
: req.body.id
// req.body.email =
// typeof req.body.email !== 'undefined' ? req.body.email.toLowerCase() : ''
req.body.emailexists = false
if (req.body.id) {
const resultuser = await Promise.all([
adminUserModule.checkEmailExisting(req.body.email),
])
if (resultuser[0].length > 0 && typeof req.body.email !== 'undefined') {
if (
resultuser[0][0].id === req.body.id &&
resultuser[0][0].email === req.body.email
) {
await Promise.all([userTableAction(req)])
} else {
req.body.emailexists = true
}
} else {
await Promise.all([userTableAction(req)])
}
if (req.body.maxbid_limit_request) {
await userMaxBidMailTrigger(req)
}
} else {
const resultuser = await Promise.all([
adminUserModule.checkEmailExisting(req.body.email),
])
if (resultuser[0].length > 0) {
req.body.emailexists = true
} else {
if (!req.body.password) {
req.body.password = Math.random().toString(36).slice(2)
}
req.body.password_salt = '12345'
req.body.password_hash = md5(md5(req.body.password) + req.body.password_salt)
const usermail = req.body.email.toLowerCase()
const firstname = req.body.first_name
const lastname = req.body.last_name
const loginurl2 = `${global.react_url.front_end}/login`
const results = await Promise.all([userTableAction(req)])
await Promise.all([
adminUserModule.manualInsertUsernotify(results[0][0].insertId),
])
await Promise.all([
commonFunction.eventTriggerFuction(
{
username: `${firstname || ''} ${lastname || ''}`,
password: req.body.password,
loginurl: loginurl2,
},
usermail,
'',
'buyer_register_admin',
1,
0,
results[0][0].insertId,
),
])
}
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
if (req.body.emailexists) {
jsonResponse(res, 'error', {
responseType: 2,
message: 'Registration Failed! Email Already Exists.',
})
} else {
const responseData = {}
jsonResponse(res, 'success', {
responseType: 1,
message: req.body.id ? 'Successfully updated!' : 'Successfully registered!',
responseData,
})
}
}
},
/**
* Change status of the User
*
* @memberOf adminside.user
* @param {adminUserModule.userStatusUpdate} modules
*/
changeStatus: async (req, res) => {
try {
if (req.body.action && req.body.user_id.length > 0) {
await adminUserModule.userStatusUpdate(req.body.action, req.body.user_id)
if (req.body.additionalUpdate) {
req.body.id = req.body.user_id
await Promise.all([userTableAction(req)])
}
if (
req.body.action === 'active' ||
req.body.action === 'rejected' ||
req.body.action === 'deactivate'
) {
const results3 = await Promise.all([
adminUserModule.commonselectparenttable(
'id,status,first_name,last_name,CONCAT(IFNULL(first_name,"")," ",IFNULL(last_name,"")) AS username,email,phone',
req.body.user_id,
'id',
global.configColumns.users,
),
])
let userStatusEmail = 'user_account_status'
let userStatus = 'Activated'
if (req.body.action === 'active') {
userStatusEmail = 'user_account_status'
userStatus = 'Activated'
} else if (req.body.action === 'deactivate') {
userStatusEmail = 'user_account_status'
userStatus = 'Deactivated'
} else if (req.body.action === 'rejected') {
userStatusEmail = 'user_account_reject_status'
userStatus = 'Rejected'
}
req.body.reject_notes = req.body.reject_notes ? req.body.reject_notes : ''
await Promise.all([
commonFunction.eventTriggerFuction(
{
username: results3[0][0].username,
status: userStatus,
content: req.body.reject_notes,
},
results3[0][0].email,
'',
userStatusEmail,
1,
0,
results3[0][0].id,
),
])
}
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
const responseData = {}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Status successfully changed',
responseData,
})
}
},
/**
* Add User
*
* @memberOf adminside.user
* @param {adminUserModule.createuserlist} modules
*/
userAdd: async (req, res) => {
try {
const userlist = await Promise.all([
adminUserModule.createuserlist(req, req.body, global.configColumns.users),
])
if (global.configColumns.custom_users.enabled) {
req.body.user_id = userlist[0].insertId
await Promise.all([
adminUserModule.createuserlist(
req,
req.body,
global.configColumns.custom_users,
),
])
}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
})
} catch (e) {
errorResponse(e, res)
}
},
/**
* Add Update
*
* @memberOf adminside.user
* @param {adminUserModule.updatealltypeofproduct} modules
* @param {adminUserModule.updatealltypeofuser} modules
*/
userUpdate: async (req, res) => {
try {
await Promise.all([
adminUserModule.updatealltypeofproduct(
req,
req.body,
req.body.id,
'id',
global.configColumns.users,
),
])
if (global.configColumns.custom_users.enabled) {
await Promise.all([
adminUserModule.updatealltypeofuser(
req,
req.body,
req.body.id,
'user_id',
global.configColumns.custom_users,
),
])
}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
})
} catch (e) {
errorResponse(e, res)
}
},
/**
* List all Users
*
* @memberOf adminside.user
* @param {adminUserModule.commonselectparenttable} modules
*/
userListing: async (req, res) => {
try {
const usersobj = {}
const [baseuserlist] = await Promise.all([
adminUserModule.commonselectparenttable(
'*',
req.body.id,
'id',
global.configColumns.users,
),
])
usersobj.user_list = baseuserlist
if (global.configColumns.custom_users.enabled) {
const [baseuserlistcus] = await Promise.all([
adminUserModule.commonselectparenttable(
'*',
req.body.id,
'user_id',
global.configColumns.custom_users,
),
])
usersobj.usercus_list = baseuserlistcus
}
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
usersobj,
})
} catch (e) {
errorResponse(e, res)
}
},
/**
* Get single action user
*
* @memberOf adminside.user
* @param {commonFunction.getValidID} modules
* @param {commonFunction.fetchTableFunction} modules
*/
getSingleActionUser: async (req, res) => {
let record = {}
try {
const id = typeof req.body.id === 'undefined' ? '' : req.body.id
req.body.id = commonFunction.getValidID(req.body.id)
const baseTableUsed = global.configColumns.users
const customTableUsed = global.configColumns.custom_users
const [records] = await Promise.all([
commonFunction.fetchTableFunction(req, baseTableUsed, customTableUsed),
])
record = records[0]
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
const responseData = { record }
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData,
})
}
},
}