const { body, param, validationResult } = require('express-validator') const { _sr } = require('../plugins/serverResponses') const { checkValidations, res400 } = require('../plugins/controllersHelperFunctions') const User = require('../models/User') const RequestGPS = require('../models/GPS.Request') module.exports.gpsRequest = [ [ body('shopName').notEmpty().isString().withMessage(_sr.fa.required.name), body('shopNumber').notEmpty().isString().withMessage(_sr.fa.required.store_number), body('shopAddress').notEmpty().isString().withMessage(_sr.fa.required.address), body('birthDate').notEmpty().isString().withMessage(_sr.fa.required.date), ], checkValidations(validationResult), async (req, res) => { const { shopName, shopNumber, shopAddress, birthDate, profilePic } = req.body; const repeated = await RequestGPS.findOne({ userId: req.user_id }) if (repeated) { res400(res, "شما قبلا درخواست ثبت کرده اید") } else { const request = await RequestGPS.create({ shopName, shopNumber, shopAddress, birthDate, profilePic, userId: req.user_id, }) res.status(201).json({ msg: 'درخواست شما با موفقیت ثبت شد', date: request }) } } ] module.exports.getAllRequest = [ async (req, res) => { const data = await RequestGPS.find({}).sort({ status: 1 }).populate('userId') res.status(200).json(data) } ] module.exports.getOneRequest = [ [ param('id').notEmpty().isMongoId().withMessage('این ایدی اشتباه است') ], checkValidations(validationResult), async (req, res) => { const data = await RequestGPS.findById(req.params.id).populate('userId') res.status(200).json(data) } ] module.exports.changeStatus = [ [ param('status').notEmpty().isString().withMessage('این استاتوس اشتباه است'), param('id').notEmpty().isMongoId().withMessage('این ایدی اشتباه است') ], checkValidations(validationResult), async (req, res) => { switch (req.params.status) { case "accept": { const data = await RequestGPS.findByIdAndUpdate(req.params.id, { status: 1 }, { new: true }) const userPreData = await User.findById(data.userId).select('walletBalance dollarBalance score') const userData = await User.findByIdAndUpdate( data.userId, { shopName: data.shopName, shopNumber: data.shopNumber, shopAddress: data.shopAddress, birthDate: data.birthDate, walletBalance: userPreData?.walletBalance | 0, dollarBalance: userPreData?.dollarBalance | 0, score: userPreData?.score | 0 }, { new: true } ) res.status(200).json({ msg: 'با موفقیت به روز شد', data: userData }) break; } case "reject": { const data = await RequestGPS.findByIdAndUpdate(req.params.id, { status: 2 }, { new: true }) res.status(200).json({ msg: 'با موفقیت به روز شد', data }) break; } default: res.status(400).json({ msg: 'این استاتوس اشتباه است' }) break; } } ]