add score page + update score after regiter imei
This commit is contained in:
@@ -25,7 +25,7 @@
|
|||||||
<el-divider></el-divider>
|
<el-divider></el-divider>
|
||||||
</CCol>
|
</CCol>
|
||||||
<CCol sm="12">
|
<CCol sm="12">
|
||||||
<el-form :model="form" :rules="rules" ref="form">
|
<el-form ref="form" :model="form" :rules="rules">
|
||||||
<el-form-item label="مبلغ نصب" prop="amount">
|
<el-form-item label="مبلغ نصب" prop="amount">
|
||||||
<el-input v-model="form.amount" placeholder="مبلغ"></el-input>
|
<el-input v-model="form.amount" placeholder="مبلغ"></el-input>
|
||||||
<span v-if="form.amount">{{ formatCurrency(form.amount) }}</span>
|
<span v-if="form.amount">{{ formatCurrency(form.amount) }}</span>
|
||||||
@@ -35,6 +35,20 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</CCol>
|
</CCol>
|
||||||
|
<CCol sm="12">
|
||||||
|
<el-divider></el-divider>
|
||||||
|
</CCol>
|
||||||
|
<CCol sm="12">
|
||||||
|
<el-form ref="scoreForm" :model="scoreForm" :rules="scoreRules">
|
||||||
|
<el-form-item label="امتیاز نصب" prop="score">
|
||||||
|
<el-input v-model="scoreForm.score" placeholder="امتیاز"></el-input>
|
||||||
|
<span v-if="scoreForm.score">{{ scoreForm.score }} امتیاز</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item >
|
||||||
|
<el-button type="primary" @click="setScore">ثبت</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</CCol>
|
||||||
</CRow>
|
</CRow>
|
||||||
</CCardBody>
|
</CCardBody>
|
||||||
</CCard>
|
</CCard>
|
||||||
@@ -57,16 +71,23 @@ export default {
|
|||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
amount: [{ required: true, message: 'لطفا مبلغ را وارد کنید', trigger: 'blur' }]
|
amount: [{ required: true, message: 'لطفا مبلغ را وارد کنید', trigger: 'blur' }]
|
||||||
|
},
|
||||||
|
scoreForm: {
|
||||||
|
score: 0
|
||||||
|
},
|
||||||
|
scoreRules: {
|
||||||
|
score: [{ required: true, message: 'لطفا امتیاز را وارد کنید', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getFee()
|
||||||
|
this.getScore()
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async setFee() {
|
async setFee() {
|
||||||
try {
|
try {
|
||||||
await this.$axios.post('/api/admin/gps/install-fee', this.form)
|
await this.$axios.post('/api/admin/gps/settings/install-fee', this.form)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
this.$message({
|
this.$message({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
@@ -80,7 +101,7 @@ export default {
|
|||||||
},
|
},
|
||||||
async getFee() {
|
async getFee() {
|
||||||
try {
|
try {
|
||||||
await this.$axios.get('/api/admin/gps/install-fee')
|
await this.$axios.get('/api/admin/gps/settings/install-fee')
|
||||||
.then(res => {
|
.then(res => {
|
||||||
this.form.amount = res.data.amount
|
this.form.amount = res.data.amount
|
||||||
})
|
})
|
||||||
@@ -91,10 +112,33 @@ export default {
|
|||||||
formatCurrency(amount) {
|
formatCurrency(amount) {
|
||||||
const formatted= new Intl.NumberFormat('fa-IR').format(amount);
|
const formatted= new Intl.NumberFormat('fa-IR').format(amount);
|
||||||
return `${formatted} تومان`;
|
return `${formatted} تومان`;
|
||||||
|
},
|
||||||
|
async setScore() {
|
||||||
|
try {
|
||||||
|
await this.$axios.post('/api/admin/gps/settings/install-score', this.scoreForm)
|
||||||
|
.then(res => {
|
||||||
|
this.$message({
|
||||||
|
type: 'success',
|
||||||
|
message: 'امتیاز نصب با موفقیت ثبت شد'
|
||||||
|
})
|
||||||
|
this.$nuxt.refresh()
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getScore() {
|
||||||
|
try {
|
||||||
|
await this.$axios.get('/api/admin/gps/settings/install-score')
|
||||||
|
.then(res => {
|
||||||
|
if (res.data && res.data.amount) {
|
||||||
|
this.scoreForm.score = res.data.amount
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.getFee()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 InstalledDevice = require('../models/GPS.InstalledDevice')
|
||||||
const Device = require('../models/GPS.Device')
|
const Device = require('../models/GPS.Device')
|
||||||
const userGPS = require('../models/GPS.User')
|
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 Score = require('../models/GPS.Score')
|
||||||
const { _sr } = require('../plugins/serverResponses')
|
const { _sr } = require('../plugins/serverResponses')
|
||||||
const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
|
const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController')
|
||||||
@@ -16,60 +16,108 @@ module.exports.deviceRegistration = [
|
|||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
const IMEI = req.body.IMEI
|
const IMEI = req.body.IMEI
|
||||||
console.log('IMEI ******************', 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
|
const existingInstalledDevice = await InstalledDevice.findOne({ IMEI }).catch(err => {
|
||||||
await userGPS.findByIdAndUpdate(req.user_id, { $inc: { walletBalance:fee.amount } })
|
console.log('err in findOne InstalledDevice', err?.message)
|
||||||
|
return res.status(500).json({ msg: 'خطا در دریافت اطلاعات از دیتابیس ثبت دستگاه' })
|
||||||
notifyAdmin('newInstallDeviceRequest')
|
})
|
||||||
res.status(201).json({ msg: 'مبلغ صد هزار تومان به کیف پول شما اضافه شد' })
|
if (existingInstalledDevice) {
|
||||||
} catch (err) {
|
return res.status(400).json({ msg: 'این IMEI قبلا ثبت شده ' })
|
||||||
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 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()
|
const data = await InstalledDevice.find()
|
||||||
.sort({ created_at: -1 })
|
.sort({ created_at: -1 })
|
||||||
.populate('deviceId')
|
.populate('deviceId')
|
||||||
.populate('userId', 'shopName national_code first_name last_name mobile_number city_name province_name')
|
.populate('userId', 'shopName national_code first_name last_name mobile_number city_name province_name')
|
||||||
// .skip(skip)
|
// .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 axios = require('axios')
|
||||||
const { kojaBaseUrl, kojaAccount } = require('./_env')
|
const { kojaBaseUrl, kojaAccount } = require('./_env')
|
||||||
|
|
||||||
export async function findDeviceByImeiOnKoja(imei) {
|
async function findDeviceByImeiOnKoja(imei) {
|
||||||
try {
|
try {
|
||||||
const result = await axios.get(`/devices/imei/${imei}`, {
|
const result = await axios.get(`/devices/imei/${imei}`, {
|
||||||
baseURL: kojaBaseUrl,
|
baseURL: kojaBaseUrl,
|
||||||
@@ -13,18 +13,31 @@ export async function findDeviceByImeiOnKoja(imei) {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.response) {
|
if (error.response) {
|
||||||
const { status } = error.response
|
const { status } = error.response
|
||||||
|
let err
|
||||||
if (status === 401) {
|
if (status === 401) {
|
||||||
throw new Error('خطا در اتصال به سامانه ردیاب')
|
err = new Error('خطا در اتصال به سامانه ردیاب')
|
||||||
|
err.status = 401
|
||||||
|
throw err
|
||||||
}
|
}
|
||||||
// if (status === 404) {
|
if (status === 404) {
|
||||||
// return false
|
err = new Error('دستگاه در سامانه ردیاب یافت نشد')
|
||||||
// }
|
err.status = 404
|
||||||
// if (status === 403) {
|
throw err
|
||||||
// return true
|
}
|
||||||
// }
|
if (status === 403) {
|
||||||
throw error
|
err = new Error('دسترسی غیرمجاز به سامانه ردیاب')
|
||||||
|
err.status = 403
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
err = new Error(error.message || 'خطا در دریافت اطلاعات از سامانه ردیاب')
|
||||||
|
err.status = status || 500
|
||||||
|
throw err
|
||||||
} else {
|
} else {
|
||||||
throw error
|
const err = new Error('خطا در دریافت اطلاعات از سامانه ردیاب')
|
||||||
|
err.status = 500
|
||||||
|
throw err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.exports = { findDeviceByImeiOnKoja }
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
const mongoose = require('mongoose')
|
const mongoose = require('mongoose')
|
||||||
|
|
||||||
|
|
||||||
const FeeSchema = mongoose.Schema({
|
const SettingsSchema = mongoose.Schema({
|
||||||
title: String,
|
title: String,
|
||||||
amount: Number,
|
amount: Number,
|
||||||
createdAt: { type: Date, default: Date.now },
|
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 awardRequest = require('../controllers/GPS.AwardRequest')
|
||||||
const userGPS = require('../controllers/GPS.User')
|
const userGPS = require('../controllers/GPS.User')
|
||||||
const renewal = require('../controllers/GPS.Renewal')
|
const renewal = require('../controllers/GPS.Renewal')
|
||||||
const fee = require('../controllers/GPS.Fee')
|
const settings = require('../controllers/GPS.Settings')
|
||||||
/// //////////////////////////////////////////////////////// routes
|
/// //////////////////////////////////////////////////////// routes
|
||||||
|
|
||||||
/// ///////////////////////////// GPS
|
/// ///////////////////////////// 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.get('/gps/device/id/:id', hasPermission('gps'), device.getOne)
|
||||||
router.put('/gps/device/:id', hasPermission('gps'), device.updateDevice)
|
router.put('/gps/device/:id', hasPermission('gps'), device.updateDevice)
|
||||||
|
|
||||||
/// ////////////// Fee
|
/// ////////////// Settings - fee
|
||||||
router.post('/gps/install-fee', hasPermission('gps'), fee.setFee)
|
router.post('/gps/settings/install-fee', hasPermission('gps'), settings.setFee)
|
||||||
router.get('/gps/install-fee', hasPermission('gps'), fee.getFee)
|
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
|
/// ///////////// survey
|
||||||
router.get('/surveys', hasPermission('surveys'), surveyController.getAllForAdmin)
|
router.get('/surveys', hasPermission('surveys'), surveyController.getAllForAdmin)
|
||||||
|
|||||||
Reference in New Issue
Block a user