From d4cffdb044b61cda73f8008b923c9a11b8aa596b Mon Sep 17 00:00:00 2001 From: Mr Swift Date: Tue, 6 Aug 2024 17:24:42 +0330 Subject: [PATCH] withdraw --- server/controllers/GPS.BankAccount.js | 14 ++--- server/controllers/GPS.InstalledDevice.js | 18 ++++++ server/controllers/GPS.Withdraw.js | 74 +++++++++++++++++++++++ server/models/GPS.Withdraw.js | 11 +++- server/models/User.js | 4 +- server/routes/admin.js | 14 ++++- server/routes/gps.js | 6 ++ 7 files changed, 128 insertions(+), 13 deletions(-) create mode 100644 server/controllers/GPS.InstalledDevice.js diff --git a/server/controllers/GPS.BankAccount.js b/server/controllers/GPS.BankAccount.js index 9e0fb70..9881a88 100644 --- a/server/controllers/GPS.BankAccount.js +++ b/server/controllers/GPS.BankAccount.js @@ -6,26 +6,26 @@ const User = require('../models/User') module.exports.addCard = [ [ body('holderName').notEmpty().isString().withMessage(_sr.fa.required.name), - body('cardNumber').notEmpty().isNumeric().withMessage(_sr.fa.required.store_number), - body('shabaNumber').notEmpty().isNumeric().withMessage(_sr.fa.required.address) + body('PAN').notEmpty().isInt().withMessage(_sr.fa.required.store_number), + body('IBAN').notEmpty().isIBAN().withMessage(_sr.fa.required.address) ], checkValidations(validationResult), async (req, res) => { - const { holderName, cardNumber, shabaNumber } = req.body; + const { holderName, PAN, IBAN } = req.body; const userData = await User.findById(req.user_id).select('id cardBank') if(userData?.cardBank && Array.isArray(userData?.cardBank)){ userData.cardBank.push({ holderName, - cardNumber, - shabaNumber + PAN, + IBAN }) userData.save() res.status(201).json({msg: 'با موفقیت ثبت شد ' }) }else{ userData.cardBank = [{ holderName, - cardNumber, - shabaNumber + PAN, + IBAN }]; userData.save() res.status(201).json({msg: 'با موفقیت ثبت شد '}) diff --git a/server/controllers/GPS.InstalledDevice.js b/server/controllers/GPS.InstalledDevice.js new file mode 100644 index 0000000..0818d8d --- /dev/null +++ b/server/controllers/GPS.InstalledDevice.js @@ -0,0 +1,18 @@ +const { body, param, validationResult } = require('express-validator'); +const { _sr } = require('../plugins/serverResponses'); +const { checkValidations } = require('../plugins/controllersHelperFunctions'); +const User = require('../models/User'); +const InstalledDevice = require('../models/GPS.InstalledDevice'); +const Device = require('../models/GPS.Device'); + + + +module.exports.createRequest = [ + [ + + ], + checkValidations(validationResult), + async (req, res) => { + + } +] diff --git a/server/controllers/GPS.Withdraw.js b/server/controllers/GPS.Withdraw.js index fb3d145..fd35696 100644 --- a/server/controllers/GPS.Withdraw.js +++ b/server/controllers/GPS.Withdraw.js @@ -4,3 +4,77 @@ const { checkValidations } = require('../plugins/controllersHelperFunctions'); const User = require('../models/User'); const Withdraw = require('../models/GPS.Withdraw'); + +module.exports.createRequest = [ + [ + body('card').notEmpty().isObject().withMessage('گارت ورودی خود را انتخاب کنید'), + ], + checkValidations(validationResult), + async (req, res) => { + const user = await User.findById(req.user_id) + const data = { + card: req.body.card, + userId: req.user_id, + amount: user.walletBalance, + dollarAmount: user.dollarBalance, + status: 0 + } + user.dollarBalance = 0; + user.walletBalance = 0; + user.save() + const request = await Withdraw.create(data) + + res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) + } +] + + +module.exports.getAllForUser = async (req, res) => { + + const requests = await Withdraw.find({ userId: req.user_id }).sort({ created_at: -1 }) + + res.status(201).json(requests) +} + +module.exports.getAllForAdmin = async (req, res) => { + + const requests = await Withdraw.find().sort({ status: 1 }) + + res.status(201).json(requests) +} + + +module.exports.updateReq = [ + [ + param('id').notEmpty().isMongoId().withMessage('ایدی را باید وارد کنید'), + param('type').notEmpty().isString().withMessage('وضعیت را باید وارد کنید'), + ], + checkValidations(validationResult), + async (req, res) => { + const request = await Withdraw.findById(req.params.id) + if (!request) { + res.status(404).json({ msg: _sr.fa.not_found.item_id }) + } else { + switch (req.params.type) { + case "accept": { + request.status = 1; + request.save() + res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) + break; + } + case "deposit": { + request.status = 2; + request.depositDate = new Date(); + request.trackingNumber = req.body.trackingNumber || 0; + request.save() + res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) + break; + } + default: { + res.status(404).json({ msg: "استاتوس اشتباه است" }) + break; + } + } + } + } +] \ No newline at end of file diff --git a/server/models/GPS.Withdraw.js b/server/models/GPS.Withdraw.js index 13ac0e6..b793193 100644 --- a/server/models/GPS.Withdraw.js +++ b/server/models/GPS.Withdraw.js @@ -3,10 +3,10 @@ const mongoose = require('mongoose') const BankSchema = mongoose.Schema({ holderName:String, - cardNumber:{ + PAN:{ type:Number, }, - shabaNumber:{ + IBAN:{ type:Number, } }) @@ -18,6 +18,10 @@ const WithdrawSchema = mongoose.Schema({ type:Number, min:0 }, + dollarAmount:{ + type:Number, + min:0 + }, userId:{ type:String, ref:'User' @@ -30,7 +34,8 @@ const WithdrawSchema = mongoose.Schema({ 2, // deposited ] }, - depositDate:Date + depositDate:Date, + trackingNumber:String }) module.exports = mongoose.model('Withdraw', WithdrawSchema) diff --git a/server/models/User.js b/server/models/User.js index 85627bb..2264c05 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -2,10 +2,10 @@ const mongoose = require('mongoose') const BankSchema = mongoose.Schema({ holderName:String, - cardNumber:{ + PAN:{ type:Number, }, - shabaNumber:{ + IBAN:{ type:Number, } }) diff --git a/server/routes/admin.js b/server/routes/admin.js index 5c57b94..51fb949 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -27,14 +27,26 @@ const surveyController = require('../controllers/surveyController') const complaintController = require('../controllers/complaintController') const brandController = require('../controllers/brandController') const requestController = require('../controllers/GPS.Request') +const withdraw = require('../controllers/GPS.Withdraw') /// //////////////////////////////////////////////////////// routes -/// ///////////// GPS + + +/// ///////////////////////////// GPS + +/// ////////////// request for access to gps router.get('/gps/request',hasPermission('gps'), requestController.getAllRequest) router.get('/gps/request/:id',hasPermission('gps'), requestController.getOneRequest) router.patch('/gps/request/:id/:status',hasPermission('gps'), requestController.changeStatus) +/// ////////////// Withdraw +router.get('/gps/withdraw',hasPermission('gps'), withdraw.getAllForAdmin) +router.patch('/gps/withdraw/:id/:type',hasPermission('gps'), withdraw.updateReq) + +/// ////////////// + +/// ///////////////////////////////////////////////////////// /// ///////////// survey router.get('/surveys',hasPermission('surveys'), surveyController.getAllForAdmin) router.get('/surveys/:id',hasPermission('surveys'), surveyController.getOneForAdmin) diff --git a/server/routes/gps.js b/server/routes/gps.js index 091654f..941bff0 100644 --- a/server/routes/gps.js +++ b/server/routes/gps.js @@ -1,9 +1,15 @@ const { Router } = require('express') const router = Router() const bankAccount = require('../controllers/GPS.BankAccount') +const withdraw = require('../controllers/GPS.Withdraw') +/// ///////////////// Bank card router.post('/bank-card', bankAccount.addCard) router.get('/bank-card', bankAccount.getAll) router.delete('/bank-card/:id', bankAccount.deleteCard) +/// ///////////////// Withdraw request +router.post('/withdraw', withdraw.createRequest) +router.get('/withdraw', withdraw.getAllForUser) + module.exports = router