From 03f9c164dbd1f31cb72aa0ca077c85fb979940af Mon Sep 17 00:00:00 2001 From: Mr Swift Date: Sun, 27 Oct 2024 16:33:16 +0330 Subject: [PATCH] Add new endpoint --- server/controllers/GPS.InstalledDevice.js | 44 +++--- server/controllers/GPS.Renewal.js | 166 ++++++++++++++++++++++ server/database.js | 2 +- server/models/GPS.Renewal.js | 7 +- server/routes/admin.js | 5 + server/routes/gps.js | 3 + server/routes/thirdParty.js | 2 + 7 files changed, 202 insertions(+), 27 deletions(-) create mode 100644 server/controllers/GPS.Renewal.js diff --git a/server/controllers/GPS.InstalledDevice.js b/server/controllers/GPS.InstalledDevice.js index c271aba..473d21e 100644 --- a/server/controllers/GPS.InstalledDevice.js +++ b/server/controllers/GPS.InstalledDevice.js @@ -102,34 +102,34 @@ module.exports.getAllForUser = async (req, res) => { module.exports.getAllForAdmin = async (req, res) => { try { - const page = parseInt(req.query.page) || 1; - const rows = parseInt(req.query.rows) || 10; - const search = req.query.search || ""; - const sortField = req.query.sortField || "status"; - const sortOrder = req.query.sortOrder === "desc" ? -1 : 1; + // const page = parseInt(req.query.page) || 1; + // const rows = parseInt(req.query.rows) || 10; + // const search = req.query.search || ""; + // const sortField = req.query.sortField || "status"; + // const sortOrder = req.query.sortOrder === "desc" ? -1 : 1; - const skip = (page - 1) * rows; + // const skip = (page - 1) * rows; - const filter = {}; - if (search) { - filter.$or = [ - { IMEI: new RegExp(search, 'i') }, - { 'userId.shopName': new RegExp(search, 'i') }, - { 'userId.national_code': new RegExp(search, 'i') }, - ]; - } + // const filter = {}; + // if (search) { + // filter.$or = [ + // { IMEI: new RegExp(search, 'i') }, + // { 'userId.shopName': new RegExp(search, 'i') }, + // { 'userId.national_code': new RegExp(search, 'i') }, + // ]; + // } - const data = await InstalledDevice.find(filter) - .sort({ [sortField]: sortOrder }) + const data = await InstalledDevice.find() + // .sort({ [sortField]: sortOrder }) .populate('deviceId') .populate('userId', 'shopName national_code first_name last_name mobile_number city_name province_name') - .skip(skip) - .limit(rows); + // .skip(skip) + // .limit(rows); - const totalDocuments = await InstalledDevice.countDocuments(filter); - const totalPages = Math.ceil(totalDocuments / rows); + // const totalDocuments = await InstalledDevice.countDocuments(filter); + // const totalPages = Math.ceil(totalDocuments / rows); - res.status(200).json({ data, totalDocuments, totalPages }); + res.status(200).json({ data }); } catch (error) { console.error('Error:', error.message); res.status(500).json({ message: "Server Error", error: error.message }); @@ -159,7 +159,7 @@ module.exports.updateInstalled = [ user.walletBalance += device.profit user.dollarBalance += device.dollarProfit - user.score = device.score + user.score += device.score await Score.create({ diff --git a/server/controllers/GPS.Renewal.js b/server/controllers/GPS.Renewal.js new file mode 100644 index 0000000..e7d8fe0 --- /dev/null +++ b/server/controllers/GPS.Renewal.js @@ -0,0 +1,166 @@ +const { body, validationResult } = require('express-validator') +const { _sr } = require('../plugins/serverResponses') +const { checkValidations } = require('../plugins/controllersHelperFunctions') +const Renewal = require('../models/GPS.Renewal') +const User = require('../models/GPS.User'); +const Score = require('../models/GPS.Score'); +const InstalledDevice = require('../models/GPS.InstalledDevice'); + +const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NzBmY2NhNmFmOWE3ODMzNDgxZWIzODkiLCJpYXQiOjE3MzAwMjk4ODUsImV4cCI6MTczMDYzNDY4NX0.2qGgmlcllXr240rJ56ID9P01Kib-74enlEUY4Ifi-f2" + + +module.exports.create = [ + [ + body('IMEI').notEmpty().isString().withMessage(_sr.fa.required.field), + body('renewDate').notEmpty().withMessage(_sr.fa.required.field), + body('renewType').notEmpty().withMessage(_sr.fa.required.field), + body('price').notEmpty().isInt().withMessage(_sr.fa.required.field), + + ], + checkValidations(validationResult), + async (req, res) => { + try { + // eslint-disable-next-line eqeqeq + if(token == req.headers["apic-token-secret"]){ + const { IMEI, renewDate, renewType, price } = req.body + const device = await InstalledDevice.findOne({IMEI}).populate('deviceId') + if(!device){ + req.status(200) + throw new Error(_sr.fa.response.success_save) + } + // eslint-disable-next-line eqeqeq + if(device.status == 1 ){ + const user = await User.findById(device.userId) + const profit = price *0.05 + const data = { + renewDate, + renewType, + price, + deviceId:device.deviceId.id, + IMEI, + profit, + userId:device.userId, + } + await Renewal.create(data) + await Score.create({ + title: " تمدید اشتراک", + deviceId: device.deviceId.id, + score: device.deviceId.score, + userId: device.userId + }) + user.walletBalance += data.profit + user.score += device.deviceId.score + user.save() + }else{ + req.status(200) + throw new Error(_sr.fa.response.success_save) + } + + }else{ + req.status(401) + throw new Error('unauthenticated') + } + } catch (error) { + req.json({msg:error.message}) + } + + } +] + + +module.exports.findAllUser = 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 || req.query.page <= 1) { + page = 0; + } else { + page = (req.query.page - 1) * rows; + } + + const search = req.query?.search || null; + + let sort = {}; + + if (req.query?.deviceId_dollarProfit) { + sort.dollarProfit = parseInt(req.query.deviceId_dollarProfit); + } + if (req.query?.status) { + sort.status = parseInt(req.query.status); + } + if (req.query?.registerDate) { + sort.registerDate = parseInt(req.query.registerDate); + } + + if (Object.keys(sort).length === 0) { + sort = { 'created_at': -1 }; + } + + const filter = { + userId: req.user_id, + }; + + if (search) { + filter.$or = [ + { IMEI: { $regex: search, $options: 'i' } }, + ]; + } + + try { + const data = await Renewal.find(filter) + .skip(page) + .limit(rows) + .sort(sort) + .populate('deviceId'); + + const total = await Renewal.countDocuments(filter); + + res.status(200).json({ data, total }); + } catch (error) { + res.status(500).json({ message: 'An error occurred', error }); + } + +} + +module.exports.findAllAdmin = async (req, res) => { + try { + // const page = parseInt(req.query.page) || 1; + // const rows = parseInt(req.query.rows) || 10; + // const search = req.query.search || ""; + // const sortField = req.query.sortField || "status"; + // const sortOrder = req.query.sortOrder === "desc" ? -1 : 1; + + // const skip = (page - 1) * rows; + + // const filter = {}; + // if (search) { + // filter.$or = [ + // { IMEI: new RegExp(search, 'i') }, + // { 'userId.shopName': new RegExp(search, 'i') }, + // { 'userId.national_code': new RegExp(search, 'i') }, + // ]; + // } + + const data = await Renewal.find() + // .sort({ [sortField]: sortOrder }) + .populate('deviceId') + .populate('userId', 'shopName national_code first_name last_name mobile_number city_name province_name') + // .skip(skip) + // .limit(rows); + + // const totalDocuments = await InstalledDevice.countDocuments(filter); + // const totalPages = Math.ceil(totalDocuments / rows); + + res.status(200).json({ data }); + } catch (error) { + console.error('Error:', error.message); + res.status(500).json({ message: "Server Error", error: error.message }); + } +} + diff --git a/server/database.js b/server/database.js index 070dc70..0c3d53e 100644 --- a/server/database.js +++ b/server/database.js @@ -1,7 +1,7 @@ /* eslint-disable no-unused-vars */ const mongoose = require('mongoose') // mongodb database connection string. change it as per your needs. here "mydb" is the name of the database. You don't need to create DB from mongodb terminal. mongoose create the database automatically. -const inHostUrl = 'mongodb://root:KPTt76tImNBBMm4Kor8QA9gB@asan-service:27017/asanserv_database?authSource=admin' +const inHostUrl = 'mongodb://root:9a82d91402ee06cb@danak-db-public.danakcorp.com:52694/asanserv_database?authSource=admin' // const outHostUrl = 'mongodb://root:KPTt76tImNBBMm4Kor8QA9gB@hotaka.liara.cloud:33794/asanserv_database?authSource=admin' const outHostUrl = 'mongodb://root:9a82d91402ee06cb@srv-captain--asan-service-db:27017/asanserv_database?authSource=admin' const init = ()=>{ diff --git a/server/models/GPS.Renewal.js b/server/models/GPS.Renewal.js index 9298bc8..76f0558 100644 --- a/server/models/GPS.Renewal.js +++ b/server/models/GPS.Renewal.js @@ -5,6 +5,9 @@ const RenewalSchema = mongoose.Schema({ type: String, ref: 'Device' }, + IMEI: { + type: String, + }, renewDate: Date, renewType: { type: String, @@ -20,10 +23,6 @@ const RenewalSchema = mongoose.Schema({ default: 0, required: true }, - dollarProfit: { - type: Number, - min: 0 - }, userId: { type: String, ref: 'UserGPS' diff --git a/server/routes/admin.js b/server/routes/admin.js index d6842be..de40797 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -32,6 +32,7 @@ const device = require('../controllers/GPS.Device') const award = require('../controllers/GPS.Award') const awardRequest = require('../controllers/GPS.AwardRequest') const userGPS = require('../controllers/GPS.User') +const renewal = require('../controllers/GPS.Renewal') /// //////////////////////////////////////////////////////// routes @@ -39,6 +40,10 @@ const userGPS = require('../controllers/GPS.User') /// ///////////////////////////// GPS +/// /////////////// Renewal +router.get('/gps/renew',hasPermission('gps'), renewal.findAllAdmin) + + /// /////////////// User router.get('/gps/users',hasPermission('gps'), userGPS.getUsersForAdmin) diff --git a/server/routes/gps.js b/server/routes/gps.js index 89dd0b6..184e649 100644 --- a/server/routes/gps.js +++ b/server/routes/gps.js @@ -9,6 +9,9 @@ const awardRequest = require('../controllers/GPS.AwardRequest') const overview = require('../controllers/GPS.Overview') const userGPS = require('../controllers/GPS.User') const notif = require('../controllers/GPS.Notif') +const renewal = require('../controllers/GPS.Renewal') +/// /////////////// Renewal +router.get('/renew', renewal.findAllUser) /// /////////////// Notification router.get('/notif/:id', notif.setSeen) diff --git a/server/routes/thirdParty.js b/server/routes/thirdParty.js index 6943fcd..c879bd2 100644 --- a/server/routes/thirdParty.js +++ b/server/routes/thirdParty.js @@ -3,10 +3,12 @@ const router = Router() /// //////////////////////////////////////////////////////// controllers const thirdPartyController = require('../controllers/thirdPartyController') +const renewal = require('../controllers/GPS.Renewal') /// //////////////////////////////////////////////////////// routes router.post('/reception', thirdPartyController.reception) router.post('/repair', thirdPartyController.repair) router.post('/sendBack', thirdPartyController.sendBack) +router.post('/renew', renewal.create) module.exports = router