/* ============================================================================ *\
|| ########################################################################## ||
|| # 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 # ||
|| # ---------------------------------------------------------------------- # ||
|| ########################################################################## ||
\* ============================================================================ */
const dateFormat = require('dateformat')
const md5 = require('md5')
const _ = require('underscore')
const moment = require('moment')
const commonSQL = require('../../common/sql').default
const commonProduct = require('../../common/products').default
const mysqclass = require('./mysqli').default
/**
* @class class to handle user functions
*/
class adminUserModule {
/**
* Fetch All Buyers
* @param {object} req request data
* @param {string} count count for the pagination
* @returns {object} sql response
*/
static async fetchBuyersAll(req, count) {
const mysql = {}
const { action } = req.body
const baseTableUsed = global.configColumns.users
const customTableUsed = global.configColumns.custom_users
let row = ''
let where = ''
let limitf = ''
let order = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
if (typeof req.body.limit === 'undefined') {
req.body.limit = global.configurations.variables.search_limit || 25
}
if (typeof req.body.page === 'undefined') {
req.body.page = 1
}
order = `order by u.id desc`
if (req.body.orderby || req.body.order) {
const sortReturn = commonProduct.sortOrderData(req, where)
if (sortReturn.order) {
order = sortReturn.order
}
if (sortReturn.where) {
where += sortReturn.where
}
}
if (req.body.similars) {
where += commonProduct.similarData(req)
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
if (
global.configColumns.third_payment_north &&
global.configColumns.third_payment_north.enabled === 1
) {
const additionalTable2 = global.configColumns.third_payment_north
const customAdditionalTable2 = { enabled: 0 }
const additionalGeneratedData2 = commonProduct.additionalTableJoin(
additionalTable2,
customAdditionalTable2,
baseTableUsed,
'left join',
'user_id',
'id',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData2.customTableJoin} `
mysql.columns = mysql.columns.concat(additionalGeneratedData2.rowstoFetch)
}
row = count === 1 ? 'get_all_buyers_limit' : 'get_all_buyers'
const limitrg = req.body.limit
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
mysql.order = order
mysql.where = where
mysql.limitf = limitf
mysql.dateNow = dateNow
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Fetch Bidding buyers All
* @param {object} req request data
* @returns {object} sql response
*/
static async fetchBiddingBuyersAll(req) {
const mysql = {}
let row = ''
let where = ''
let order = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
order = `order by u.id desc`
if (req.body.orderby || req.body.order) {
const sortReturn = commonProduct.sortOrderData(req, where)
if (sortReturn.order) {
order = sortReturn.order
}
if (sortReturn.where) {
where += sortReturn.where
}
}
if (req.body.similars) {
where += commonProduct.similarData(req)
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
mysql.columns = ['id', 'email', 'first_name', 'last_name']
row = 'get_all_bidding_buyers'
const escapeData = []
mysql.order = order
mysql.where = where
mysql.dateNow = dateNow
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Fetch Single User
* @param {number} pid User ID which details has to be fetched
* @returns {object} sql response
*/
static async fetchUsersbyID(pid) {
const mysql = {}
const escapeData = [pid]
const strQuery = await mysqclass.mysqli(mysql, 'get_single_user_buyer')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Check Email Exists
* @param {string} nameID Email which has to be checked for unique
* @returns {object} sql response
*/
static async checkEmailExisting(nameID) {
const mysql = {}
const escapeData = [nameID]
const strQuery = await mysqclass.mysqli(mysql, 'check_email_exists')
const data = await global.mysql.query(strQuery, escapeData)
return data
}
/**
* User Operation to update or insert
* @param {object} req req object
* @returns {object} sql response
*/
static async userOperation(req) {
const mysql = {}
const postData = req.body
const acceptedObjects = [
'first_name',
'last_name',
'address1',
'status',
'email',
'password_hash',
'password_salt',
'phone',
'city',
'state',
'zip',
]
let escapeData = []
let row = ''
if (req.body.id) {
const defaultKeys = ['updated_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysql.keys = valueInsert.keys
escapeData = valueInsert.escapeData
row = 'update_on_users'
mysql.user_id = req.body.id
} else {
req.body.password_salt = '12345'
req.body.password_hash = md5(md5(req.body.password) + req.body.password_salt)
const defaultKeys = ['created_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysql.keys = valueInsert.keys
escapeData = valueInsert.escapeData
row = 'insert_into_users'
}
const strQuery = await mysqclass.mysqli(mysql, row)
const data = await global.mysql.query(strQuery, escapeData)
return data
}
/**
* Manual insert notification
* @param {number} uid user ID which notification has to be added
* @returns {object} sql response
*/
static async manualInsertUsernotify(uid) {
const mysql = {}
const escapeData = [uid]
const strQuery = await mysqclass.mysqli(mysql, 'insert_into_notification')
const data = await global.mysql.query(strQuery, escapeData)
return data
}
/**
* Update user status
* @param {string} status status which has to be updated
* @param {number} uid user ID where status to be updated
* @returns {object} sql response
*/
static async userStatusUpdate(status, pid) {
const mysql = {}
const escapeData = [status, pid]
const strQuery = await mysqclass.mysqli(mysql, 'user_change_market_status')
const dataReturn = await global.mysql.query(strQuery, escapeData)
console.log('dataReturn', strQuery, escapeData)
return dataReturn
}
/**
* Create a user insert query
* @param {object} req request data
* @param {object} data request.body data
* @param {string} baseTableUsed baseTable which the query has to be generated
* @returns {object} sql response
*/
static async createuserlist(req, data, baseTableUsed) {
const mysqli = {}
let escapeData = []
const postData = data
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['created_at', 'updated_at']
const defaultValues = [
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = valueInsert.values
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* Update query for the users
* @param {object} req request data
* @param {object} data request.body data
* @param {string} baseTableUsed baseTable which the query has to be generated
* @returns {object} sql response
*/
static async updatealltypeofuser(req, data, proid, typeoffield, baseTableUsed) {
const mysqli = {}
let escapeData = []
const postData = data
const postID = proid
const fieldType = typeoffield
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['updated_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = ` ${fieldType}=${postID}`
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* Select query to fetch all users
* @param {object} data request.body data
* @param {string} baseTableUsed baseTable which the query has to be generated
* @returns {object} sql response
*/
static async commonselectparenttable(data, proid, baseid, baseTableUsed) {
const mysqli = {}
const escapeData = [proid]
mysqli.keys = data
mysqli.values = `${baseid} IN (?)`
mysqli.tables = baseTableUsed.ext_name
mysqli.group_by = ''
mysqli.order_by = ''
mysqli.limit_by = ''
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Get particula table details
* @param {object} data request.body data
* @param {string} fieldType fieldType
* @param {number} postID post ID
* @param {string} baseTableUsed baseTable which the query has to be generated
* @param {number} limit limt the table retrive records
* @returns {object} sql response
*/
static async getparticulartabledetails(data, fieldType, postID, baseTableUsed, limit) {
const mysqli = {}
const escapeData = []
mysqli.keys = data
mysqli.values = ` ${fieldType}="${postID}"`
mysqli.tables = baseTableUsed
mysqli.group_by = ''
mysqli.order_by = ''
if (limit > 0) {
mysqli.limit_by = ` limit ${limit}`
} else {
mysqli.limit_by = ''
}
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
}
module.exports.default = adminUserModule