add score page + update score after regiter imei
This commit is contained in:
@@ -1,25 +0,0 @@
|
||||
const { body, validationResult } = require('express-validator')
|
||||
const Fee = require('../models/GPS.Fee')
|
||||
const titleKey = 'install_fee'
|
||||
const { checkValidations } = require('../plugins/controllersHelperFunctions')
|
||||
|
||||
module.exports.setFee = [
|
||||
[body('amount').notEmpty().isInt().withMessage('مقدار هزینه را وارد کنید')],
|
||||
checkValidations(validationResult),
|
||||
async (req, res) => {
|
||||
const { amount } = req.body
|
||||
const fee = await Fee.findOne({ title: titleKey })
|
||||
if (fee) {
|
||||
fee.amount = amount
|
||||
await fee.save()
|
||||
return res.status(200).json(fee)
|
||||
}
|
||||
const newFee = await Fee.create({ title: titleKey, amount })
|
||||
res.status(201).json(newFee)
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.getFee = async (req, res) => {
|
||||
const fee = await Fee.findOne({ title: titleKey })
|
||||
res.status(200).json(fee)
|
||||
}
|
||||
@@ -4,7 +4,7 @@ const User = require('../models/GPS.User')
|
||||
const InstalledDevice = require('../models/GPS.InstalledDevice')
|
||||
const Device = require('../models/GPS.Device')
|
||||
const userGPS = require('../models/GPS.User')
|
||||
const Fee = require('../models/GPS.Fee')
|
||||
const Settings = require('../models/GPS.Settings')
|
||||
const Score = require('../models/GPS.Score')
|
||||
const { _sr } = require('../plugins/serverResponses')
|
||||
const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
|
||||
@@ -16,60 +16,108 @@ module.exports.deviceRegistration = [
|
||||
async (req, res) => {
|
||||
const IMEI = req.body.IMEI
|
||||
console.log('IMEI ******************', IMEI)
|
||||
try {
|
||||
const installedDevice = await InstalledDevice.findOne({ IMEI })
|
||||
// // const installedDevice = false
|
||||
if (installedDevice) {
|
||||
return res.status(400).json({ msg: 'این IMEI قبلا ثبت شده ' })
|
||||
}
|
||||
// const isRegisteredOnKoja = true
|
||||
const RegisteredDevice = await findDeviceByImeiOnKoja(IMEI)
|
||||
if (!RegisteredDevice) {
|
||||
return res.status(400).json({ msg: 'هنوز در سامانه ردیاب ثبت نشده است.' })
|
||||
}
|
||||
let installedDeviceId = null
|
||||
try {
|
||||
const fee = await Fee.findOne({ title: 'install_fee' })
|
||||
if (!fee) {
|
||||
return res.status(400).json({ msg: 'هزینه نصب یافت نشد' })
|
||||
}
|
||||
const data = {
|
||||
// deviceId: RegisteredDevice.deviceId,
|
||||
deviceType: RegisteredDevice.device_type.name,
|
||||
status: 1,
|
||||
registerDate: new Date(),
|
||||
userId: req.user_id,
|
||||
IMEI: req.body.IMEI
|
||||
}
|
||||
// 1.add to installed device
|
||||
const installedDevice = await InstalledDevice.create(data)
|
||||
installedDeviceId = installedDevice._id
|
||||
|
||||
// 2. add to wallet
|
||||
await userGPS.findByIdAndUpdate(req.user_id, { $inc: { walletBalance:fee.amount } })
|
||||
|
||||
notifyAdmin('newInstallDeviceRequest')
|
||||
res.status(201).json({ msg: 'مبلغ صد هزار تومان به کیف پول شما اضافه شد' })
|
||||
} catch (err) {
|
||||
console.log('Error in Db Transactions', err?.message)
|
||||
if (installedDeviceId) {
|
||||
try {
|
||||
await InstalledDevice.deleteOne({ _id: installedDeviceId })
|
||||
console.log('Rollback: InstalledDevice deleted.')
|
||||
} catch (error) {
|
||||
console.error('CRITICAL: Rollback failed for some changes. MANUAL INTERVENTION REQUIRED.', error)
|
||||
}
|
||||
}
|
||||
return res.status(err?.status || 500).json({ msg: err?.msg || 'خطا در تراکنش های دیتابیس ' })
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('deviceRegistration Error: ', err?.message)
|
||||
if (err.response) {
|
||||
const { status } = err.response
|
||||
return res.status(status || 500).json({ msg: err.message || 'خطا!' })
|
||||
}
|
||||
return res.status(err.status || 500).json({ msg: err.msg || 'خطا در ثبت دستگاه' })
|
||||
const existingInstalledDevice = await InstalledDevice.findOne({ IMEI }).catch(err => {
|
||||
console.log('err in findOne InstalledDevice', err?.message)
|
||||
return res.status(500).json({ msg: 'خطا در دریافت اطلاعات از دیتابیس ثبت دستگاه' })
|
||||
})
|
||||
if (existingInstalledDevice) {
|
||||
return res.status(400).json({ msg: 'این IMEI قبلا ثبت شده ' })
|
||||
}
|
||||
// const isRegisteredOnKoja = true
|
||||
let registeredDevice
|
||||
try {
|
||||
registeredDevice = await findDeviceByImeiOnKoja(IMEI)
|
||||
} catch (err) {
|
||||
return res.status(err.status || 500).json({ msg: err.message })
|
||||
}
|
||||
if (!registeredDevice) {
|
||||
return res.status(400).json({ msg: 'هنوز در سامانه ردیاب ثبت نشده است.' })
|
||||
}
|
||||
if (!registeredDevice.device_type || !registeredDevice.device_type.name) {
|
||||
return res.status(400).json({ msg: 'اطلاعات دستگاه ناقص است' })
|
||||
}
|
||||
let installedDeviceId = null
|
||||
let scoreData = null
|
||||
let walletUpdated = false
|
||||
try {
|
||||
const fee = await Settings.findOne({ title: 'install_fee' })
|
||||
if (!fee) {
|
||||
return res.status(400).json({ msg: 'هزینه نصب یافت نشد' })
|
||||
}
|
||||
const score = await Settings.findOne({ title: 'install_score' })
|
||||
if (!score) {
|
||||
return res.status(400).json({ msg: 'امتیاز نصب یافت نشد' })
|
||||
}
|
||||
const data = {
|
||||
// deviceId: RegisteredDevice.deviceId,
|
||||
installationDate: new Date(registeredDevice.activated_at),
|
||||
deviceType: registeredDevice.device_type.name,
|
||||
status: 1,
|
||||
registerDate: new Date(),
|
||||
userId: req.user_id,
|
||||
IMEI: req.body.IMEI
|
||||
}
|
||||
// 1.add to installed device
|
||||
const installedDevice = await InstalledDevice.create(data)
|
||||
installedDeviceId = installedDevice._id
|
||||
// 2. add to score
|
||||
scoreData = await Score.create({
|
||||
title: 'ثبت دستگاه',
|
||||
deviceId: installedDevice.id,
|
||||
score: score.amount,
|
||||
userId: req.user_id
|
||||
})
|
||||
|
||||
// 3. add to wallet
|
||||
await userGPS.findByIdAndUpdate(req.user_id, {
|
||||
$inc: { walletBalance: fee.amount, score: score.amount, totalScore: score.amount }
|
||||
})
|
||||
walletUpdated = true
|
||||
|
||||
notifyAdmin('newInstallDeviceRequest')
|
||||
res.status(201).json({
|
||||
msg:
|
||||
'مبلغ ' + fee.amount + ' تومان به کیف پول شما اضافه شد و ' + score.amount + ' امتیاز به امتیاز شما اضافه شد'
|
||||
})
|
||||
} catch (err) {
|
||||
console.log('Error in Db Transactions', err?.message)
|
||||
if (installedDeviceId) {
|
||||
try {
|
||||
await InstalledDevice.deleteOne({ _id: installedDeviceId })
|
||||
console.log('Rollback: InstalledDevice deleted.')
|
||||
} catch (error) {
|
||||
console.error('CRITICAL: Rollback failed for some changes. MANUAL INTERVENTION REQUIRED.', error)
|
||||
}
|
||||
}
|
||||
if (scoreData) {
|
||||
try {
|
||||
await Score.deleteOne({ _id: scoreData._id })
|
||||
console.log('Rollback: Score deleted.')
|
||||
} catch (error) {
|
||||
console.error('CRITICAL: Rollback failed for some changes. MANUAL INTERVENTION REQUIRED.', error)
|
||||
}
|
||||
}
|
||||
if (walletUpdated) {
|
||||
try {
|
||||
const fee = await Settings.findOne({ title: 'install_fee' })
|
||||
const score = await Settings.findOne({ title: 'install_score' })
|
||||
if (fee && score) {
|
||||
await userGPS.findByIdAndUpdate(req.user_id, { $inc: { walletBalance: -fee.amount, score: -score.amount } })
|
||||
console.log('Rollback: Wallet balance and score reverted.')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('CRITICAL: Rollback failed for wallet update. MANUAL INTERVENTION REQUIRED.', error)
|
||||
}
|
||||
}
|
||||
return res.status(err?.status || 500).json({ msg: err?.msg || 'خطا در تراکنش های دیتابیس ' })
|
||||
}
|
||||
|
||||
// console.log('deviceRegistration Error: ', err?.message)
|
||||
// if (err.response) {
|
||||
// const { status } = err.response
|
||||
// return res.status(status || 500).json({ msg: err.message || 'خطا!' })
|
||||
// }
|
||||
}
|
||||
]
|
||||
|
||||
@@ -146,7 +194,7 @@ module.exports.getAllForAdmin = async (req, res) => {
|
||||
// }
|
||||
|
||||
const data = await InstalledDevice.find()
|
||||
.sort({ created_at: -1 })
|
||||
.sort({ created_at: -1 })
|
||||
.populate('deviceId')
|
||||
.populate('userId', 'shopName national_code first_name last_name mobile_number city_name province_name')
|
||||
// .skip(skip)
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
const { body, validationResult } = require('express-validator')
|
||||
const Settings = require('../models/GPS.Settings')
|
||||
const { checkValidations } = require('../plugins/controllersHelperFunctions')
|
||||
const titleKey = 'install_fee'
|
||||
const titleKeyScore = 'install_score'
|
||||
|
||||
module.exports.setFee = [
|
||||
[body('amount').notEmpty().isInt().withMessage('مقدار هزینه را وارد کنید')],
|
||||
checkValidations(validationResult),
|
||||
async (req, res) => {
|
||||
const { amount } = req.body
|
||||
const fee = await Settings.findOne({ title: titleKey })
|
||||
if (fee) {
|
||||
Settings.amount = amount
|
||||
await Settings.save()
|
||||
return res.status(200).json(fee)
|
||||
}
|
||||
const newFee = await Settings.create({ title: titleKey, amount })
|
||||
res.status(201).json(newFee)
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.setScore = [
|
||||
[body('score').notEmpty().isInt().withMessage('مقدار امتیاز را وارد کنید')],
|
||||
checkValidations(validationResult),
|
||||
async (req, res) => {
|
||||
const { score } = req.body
|
||||
const record = await Settings.findOne({ title: titleKeyScore })
|
||||
if (record) {
|
||||
record.amount = score
|
||||
await record.save()
|
||||
return res.status(200).json(record)
|
||||
}
|
||||
const newScore = await Settings.create({ title: titleKeyScore, amount: score })
|
||||
res.status(201).json(newScore)
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.getFee = async (req, res) => {
|
||||
const fee = await Settings.findOne({ title: titleKey })
|
||||
res.status(200).json(fee)
|
||||
}
|
||||
module.exports.getScore = async (req, res) => {
|
||||
const score = await Settings.findOne({ title: titleKeyScore })
|
||||
res.status(200).json(score)
|
||||
}
|
||||
+23
-10
@@ -1,7 +1,7 @@
|
||||
const axios = require('axios')
|
||||
const { kojaBaseUrl, kojaAccount } = require('./_env')
|
||||
|
||||
export async function findDeviceByImeiOnKoja(imei) {
|
||||
async function findDeviceByImeiOnKoja(imei) {
|
||||
try {
|
||||
const result = await axios.get(`/devices/imei/${imei}`, {
|
||||
baseURL: kojaBaseUrl,
|
||||
@@ -13,18 +13,31 @@ export async function findDeviceByImeiOnKoja(imei) {
|
||||
} catch (error) {
|
||||
if (error.response) {
|
||||
const { status } = error.response
|
||||
let err
|
||||
if (status === 401) {
|
||||
throw new Error('خطا در اتصال به سامانه ردیاب')
|
||||
err = new Error('خطا در اتصال به سامانه ردیاب')
|
||||
err.status = 401
|
||||
throw err
|
||||
}
|
||||
// if (status === 404) {
|
||||
// return false
|
||||
// }
|
||||
// if (status === 403) {
|
||||
// return true
|
||||
// }
|
||||
throw error
|
||||
if (status === 404) {
|
||||
err = new Error('دستگاه در سامانه ردیاب یافت نشد')
|
||||
err.status = 404
|
||||
throw err
|
||||
}
|
||||
if (status === 403) {
|
||||
err = new Error('دسترسی غیرمجاز به سامانه ردیاب')
|
||||
err.status = 403
|
||||
throw err
|
||||
}
|
||||
err = new Error(error.message || 'خطا در دریافت اطلاعات از سامانه ردیاب')
|
||||
err.status = status || 500
|
||||
throw err
|
||||
} else {
|
||||
throw error
|
||||
const err = new Error('خطا در دریافت اطلاعات از سامانه ردیاب')
|
||||
err.status = 500
|
||||
throw err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { findDeviceByImeiOnKoja }
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
const mongoose = require('mongoose')
|
||||
|
||||
|
||||
const FeeSchema = mongoose.Schema({
|
||||
const SettingsSchema = mongoose.Schema({
|
||||
title: String,
|
||||
amount: Number,
|
||||
createdAt: { type: Date, default: Date.now },
|
||||
})
|
||||
|
||||
module.exports = mongoose.model('Fee', FeeSchema)
|
||||
module.exports = mongoose.model('Settings', SettingsSchema)
|
||||
@@ -33,7 +33,7 @@ const award = require('../controllers/GPS.Award')
|
||||
const awardRequest = require('../controllers/GPS.AwardRequest')
|
||||
const userGPS = require('../controllers/GPS.User')
|
||||
const renewal = require('../controllers/GPS.Renewal')
|
||||
const fee = require('../controllers/GPS.Fee')
|
||||
const settings = require('../controllers/GPS.Settings')
|
||||
/// //////////////////////////////////////////////////////// routes
|
||||
|
||||
/// ///////////////////////////// GPS
|
||||
@@ -81,9 +81,13 @@ router.get('/gps/device/imei/:imei', hasPermission('gps'), device.getOneByIMEI)
|
||||
router.get('/gps/device/id/:id', hasPermission('gps'), device.getOne)
|
||||
router.put('/gps/device/:id', hasPermission('gps'), device.updateDevice)
|
||||
|
||||
/// ////////////// Fee
|
||||
router.post('/gps/install-fee', hasPermission('gps'), fee.setFee)
|
||||
router.get('/gps/install-fee', hasPermission('gps'), fee.getFee)
|
||||
/// ////////////// Settings - fee
|
||||
router.post('/gps/settings/install-fee', hasPermission('gps'), settings.setFee)
|
||||
router.get('/gps/settings/install-fee', hasPermission('gps'), settings.getFee)
|
||||
/// /////////////////////////////////////////////////////////
|
||||
/// ////////////// Fee - score
|
||||
router.post('/gps/settings/install-score', hasPermission('gps'), settings.setScore)
|
||||
router.get('/gps/settings/install-score', hasPermission('gps'), settings.getScore)
|
||||
/// /////////////////////////////////////////////////////////
|
||||
/// ///////////// survey
|
||||
router.get('/surveys', hasPermission('surveys'), surveyController.getAllForAdmin)
|
||||
|
||||
Reference in New Issue
Block a user