const { body, param, validationResult } = require('express-validator'); const { checkValidations } = require('../plugins/controllersHelperFunctions'); const User = require('../models/GPS.User'); const InstalledDevice = require('../models/GPS.InstalledDevice'); const Device = require('../models/GPS.Device'); const Score = require('../models/GPS.Score'); const { _sr } = require('../plugins/serverResponses'); const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') module.exports.deviceRegistration = [ [ body('IMEI').notEmpty().isString().withMessage('لطفا IMEI را وارد یا تصحیح کنید') ], checkValidations(validationResult), async (req, res) => { const device = await Device.findOne({ IMEI: req.body.IMEI }); if (!device) { throw res.status(404).json({ msg: 'این IMEI وجود ندارد' }) // eslint-disable-next-line eqeqeq } else if (device.status == 1) { throw res.status(404).json({ msg: 'این IMEI قبلا ثبت شده' }) } else { const data = { deviceId: device.id, status: 0, registerDate: new Date(), userId: req.user_id, IMEI: req.body.IMEI } const newRequest = await InstalledDevice.create(data); device.status = 1; device.save() notifyAdmin('newInstallDeviceRequest') // res.status(201).json({ msg: _sr.fa.response.success_save, data: newRequest }) res.status(201).json(newRequest) } } ] module.exports.getAllForUser = async (req, res) => { let page; let rows; if (!req.query?.rows || req.query?.rows <= 5) { rows = 10 } else { rows = parseInt(req.query.rows) } if (!req.query?.page) { page = 0 // eslint-disable-next-line eqeqeq } else if (req.query.page <= 1) { page = 0 } else { page = req.query.page page = page * rows - rows } const search = req.query?.search ? req.query.search : null let sort if(req.query?.sort){ sort= req.query?.sort }else{ sort= { created_at: -1 } } const filter = { userId: req.user_id, } if(search){ filter.$or = [ { IMEI: { $regex: search } }, ] } const data = await InstalledDevice.find(filter).skip(page).limit(rows).sort(sort).populate('deviceId') const total = Math.ceil((await InstalledDevice.countDocuments(filter))) res.status(200).json({ data, total }) } module.exports.getAllForAdmin = async (req, res) => { // let page; // let rows; // if (!req.query?.rows || req.query?.rows <= 5) { // rows = 10 // } else { // rows = parseInt(req.query.rows) // } // if (!req.query?.page) { // page = 0 // // eslint-disable-next-line eqeqeq // } else if (req.query.page <= 1) { // page = 0 // } else { // page = req.query.page // page = page * rows - rows // } // const search = req.query?.search ? req.query.search : "" const data = await InstalledDevice.find({}).sort({ status: 1 }) .populate('deviceId') .populate('userId', 'shopName national_code first_name last_name mobile_number city_name province_name') const total = Math.ceil((await InstalledDevice.estimatedDocumentCount())) res.status(200).json({ data, total }) } module.exports.updateInstalled = [ [ param('id').notEmpty().isMongoId().withMessage('لطفا ایدی را وارد یا تصحیح کنید'), param('type').notEmpty().isString().withMessage('لطفا وضعیت را وارد یا تصحیح کنید'), ], checkValidations(validationResult), async (req, res) => { const installedDevice = await InstalledDevice.findById(req.params.id) if (!installedDevice) { throw res.status(404).json({ msg: 'این ایدی وجود ندارد' }) } else { const user = await User.findById(installedDevice.userId).select('walletBalance dollarBalance score') const device = await Device.findById(installedDevice.deviceId) switch (req.params.type) { case "accept": { installedDevice.status = 1; installedDevice.installationDate = new Date(); device.status = 1; user.walletBalance += device.profit user.dollarBalance += device.dollarProfit user.score = device.score await Score.create({ title: "ثبت دستگاه", deviceId: device.id, score: device.score, userId: installedDevice.userId }) user.save() device.save() installedDevice.save() notifyAdmin('newInstallDeviceRequest') res.status(201).json({ msg: _sr.fa.response.success_save, data: installedDevice }) break; } case "reject": { installedDevice.status = 2; installedDevice.save() device.status = 0; device.save() notifyAdmin('newInstallDeviceRequest') res.status(201).json({ msg: _sr.fa.response.success_save, data: installedDevice }) break; } default: { res.status(404).json({ msg: "استاتوس اشتباه است" }) break; } } } } ]