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) => {
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({
+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 */
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 = ()=>{
+3 -4
View File
@@ -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'
+5
View File
@@ -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)
+3
View File
@@ -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)
+2
View File
@@ -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