const { body, param, validationResult } = require('express-validator'); const { _sr } = require('../plugins/serverResponses'); 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) => { try { const withdraw = await Withdraw.findOne({userId: req.user_id, status:0}) if(withdraw){ res.status(400).json({ msg: 'شما درخواست درحال بررسی دارید' }) }else{ 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 } const request = await Withdraw.create(data) user.dollarBalance = 0; user.walletBalance = 0; user.save() res.status(201).json({ msg: _sr.fa.response.success_save, data: request }) } } catch (error) { res.status(500).json({ msg: error }) } } ] 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 : "" const data = await Withdraw.find({ userId: req.user_id, $or: [ { amount: { $regex: search, $options: 'i' } }, { dollarAmount: { $regex: search, $options: 'i' } }, { trackingNumber: { $regex: search, $options: 'i' } }, ], }).skip(page).limit(rows).sort({ created_at: -1 }); const total = Math.ceil((await Withdraw.countDocuments({ userId: req.user_id }))) res.status(201).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 data = await Withdraw.find().sort({ status: 1 }).skip(page).limit(rows) .populate('userId', 'shopName shopNumber shopAddress birthDate score first_name last_name profilePic') const total = Math.ceil((await Withdraw.estimatedDocumentCount())) res.status(201).json({ data, total }) } 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; } } } } ]