Add new endpoint

This commit is contained in:
Mr Swift
2024-10-27 16:33:16 +03:30
parent 15ba0fab47
commit 03f9c164db
7 changed files with 202 additions and 27 deletions
+22 -22
View File
@@ -102,34 +102,34 @@ module.exports.getAllForUser = async (req, res) => {
module.exports.getAllForAdmin = async (req, res) => { module.exports.getAllForAdmin = async (req, res) => {
try { try {
const page = parseInt(req.query.page) || 1; // const page = parseInt(req.query.page) || 1;
const rows = parseInt(req.query.rows) || 10; // const rows = parseInt(req.query.rows) || 10;
const search = req.query.search || ""; // const search = req.query.search || "";
const sortField = req.query.sortField || "status"; // const sortField = req.query.sortField || "status";
const sortOrder = req.query.sortOrder === "desc" ? -1 : 1; // const sortOrder = req.query.sortOrder === "desc" ? -1 : 1;
const skip = (page - 1) * rows; // const skip = (page - 1) * rows;
const filter = {}; // const filter = {};
if (search) { // if (search) {
filter.$or = [ // filter.$or = [
{ IMEI: new RegExp(search, 'i') }, // { IMEI: new RegExp(search, 'i') },
{ 'userId.shopName': new RegExp(search, 'i') }, // { 'userId.shopName': new RegExp(search, 'i') },
{ 'userId.national_code': new RegExp(search, 'i') }, // { 'userId.national_code': new RegExp(search, 'i') },
]; // ];
} // }
const data = await InstalledDevice.find(filter) const data = await InstalledDevice.find()
.sort({ [sortField]: sortOrder }) // .sort({ [sortField]: sortOrder })
.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)
.limit(rows); // .limit(rows);
const totalDocuments = await InstalledDevice.countDocuments(filter); // const totalDocuments = await InstalledDevice.countDocuments(filter);
const totalPages = Math.ceil(totalDocuments / rows); // const totalPages = Math.ceil(totalDocuments / rows);
res.status(200).json({ data, totalDocuments, totalPages }); res.status(200).json({ data });
} catch (error) { } catch (error) {
console.error('Error:', error.message); console.error('Error:', error.message);
res.status(500).json({ message: "Server 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.walletBalance += device.profit
user.dollarBalance += device.dollarProfit user.dollarBalance += device.dollarProfit
user.score = device.score user.score += device.score
await Score.create({ await Score.create({
+166
View File
@@ -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 });
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
/* eslint-disable no-unused-vars */ /* eslint-disable no-unused-vars */
const mongoose = require('mongoose') 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. // 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: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 outHostUrl = 'mongodb://root:9a82d91402ee06cb@srv-captain--asan-service-db:27017/asanserv_database?authSource=admin'
const init = ()=>{ const init = ()=>{
+3 -4
View File
@@ -5,6 +5,9 @@ const RenewalSchema = mongoose.Schema({
type: String, type: String,
ref: 'Device' ref: 'Device'
}, },
IMEI: {
type: String,
},
renewDate: Date, renewDate: Date,
renewType: { renewType: {
type: String, type: String,
@@ -20,10 +23,6 @@ const RenewalSchema = mongoose.Schema({
default: 0, default: 0,
required: true required: true
}, },
dollarProfit: {
type: Number,
min: 0
},
userId: { userId: {
type: String, type: String,
ref: 'UserGPS' ref: 'UserGPS'
+5
View File
@@ -32,6 +32,7 @@ const device = require('../controllers/GPS.Device')
const award = require('../controllers/GPS.Award') 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')
/// //////////////////////////////////////////////////////// routes /// //////////////////////////////////////////////////////// routes
@@ -39,6 +40,10 @@ const userGPS = require('../controllers/GPS.User')
/// ///////////////////////////// GPS /// ///////////////////////////// GPS
/// /////////////// Renewal
router.get('/gps/renew',hasPermission('gps'), renewal.findAllAdmin)
/// /////////////// User /// /////////////// User
router.get('/gps/users',hasPermission('gps'), userGPS.getUsersForAdmin) router.get('/gps/users',hasPermission('gps'), userGPS.getUsersForAdmin)
+3
View File
@@ -9,6 +9,9 @@ const awardRequest = require('../controllers/GPS.AwardRequest')
const overview = require('../controllers/GPS.Overview') const overview = require('../controllers/GPS.Overview')
const userGPS = require('../controllers/GPS.User') const userGPS = require('../controllers/GPS.User')
const notif = require('../controllers/GPS.Notif') const notif = require('../controllers/GPS.Notif')
const renewal = require('../controllers/GPS.Renewal')
/// /////////////// Renewal
router.get('/renew', renewal.findAllUser)
/// /////////////// Notification /// /////////////// Notification
router.get('/notif/:id', notif.setSeen) router.get('/notif/:id', notif.setSeen)
+2
View File
@@ -3,10 +3,12 @@ const router = Router()
/// //////////////////////////////////////////////////////// controllers /// //////////////////////////////////////////////////////// controllers
const thirdPartyController = require('../controllers/thirdPartyController') const thirdPartyController = require('../controllers/thirdPartyController')
const renewal = require('../controllers/GPS.Renewal')
/// //////////////////////////////////////////////////////// routes /// //////////////////////////////////////////////////////// routes
router.post('/reception', thirdPartyController.reception) router.post('/reception', thirdPartyController.reception)
router.post('/repair', thirdPartyController.repair) router.post('/repair', thirdPartyController.repair)
router.post('/sendBack', thirdPartyController.sendBack) router.post('/sendBack', thirdPartyController.sendBack)
router.post('/renew', renewal.create)
module.exports = router module.exports = router