full
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/* eslint-disable camelcase */
|
||||
const mongoose = require('mongoose')
|
||||
const jMoment = require('moment-jalaali')
|
||||
const WalletWithdrawalRequestModel = require('../../../models/WalletWithdrawalRequestModel')
|
||||
const { notifyUser } = require('../../../utils/notifyUser')
|
||||
|
||||
const getWalletRequests = async (req, res, next) => {
|
||||
try {
|
||||
const { page = 1, limit = 20, status } = req.query
|
||||
const filter = {}
|
||||
if (status) filter.status = status
|
||||
|
||||
const options = {
|
||||
page: parseInt(page),
|
||||
limit: parseInt(limit),
|
||||
sort: { requestedAt: -1 },
|
||||
populate: [
|
||||
{ path: 'user', select: '_id user_name first_name last_name profile_image' },
|
||||
{ path: 'shop', select: '_id name' }
|
||||
]
|
||||
}
|
||||
|
||||
const requests = await WalletWithdrawalRequestModel.paginate(filter, options)
|
||||
const list = requests.docs.map((req) => ({
|
||||
_id: req._id,
|
||||
profile_image: req.user?.profile_image,
|
||||
first_name: req.user?.first_name,
|
||||
last_name: req.user?.last_name,
|
||||
user_name: req.user?.user_name,
|
||||
bucket: req.bucket,
|
||||
shop_name: req.shop?.name || null,
|
||||
amount: req.amount,
|
||||
shaba: req.shabaSnapshot,
|
||||
status: req.status,
|
||||
requestedAt: jMoment(req.requestedAt).format('jYYYY-jMM-jDD HH:mm'),
|
||||
paidAt: req.paidAt ? jMoment(req.paidAt).format('jYYYY-jMM-jDD HH:mm') : null
|
||||
}))
|
||||
|
||||
res.status(200).json({
|
||||
requests: list,
|
||||
totalPages: requests.totalPages,
|
||||
totalItems: requests.totalDocs
|
||||
})
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
|
||||
const updateWalletRequestStatus = async (req, res, next) => {
|
||||
try {
|
||||
const { id } = req.params
|
||||
const { status } = req.body
|
||||
|
||||
if (!mongoose.Types.ObjectId.isValid(id)) {
|
||||
return res.status(400).json({ message: 'شناسه درخواست معتبر نیست' })
|
||||
}
|
||||
if (!['در حال انجام', 'منتظر تایید', 'انجام شده'].includes(status)) {
|
||||
return res.status(422).json({ message: 'وضعیت انتخابشده معتبر نیست' })
|
||||
}
|
||||
|
||||
const update = { status }
|
||||
if (status === 'انجام شده') {
|
||||
update.paidAt = new Date()
|
||||
}
|
||||
|
||||
const request = await WalletWithdrawalRequestModel.findByIdAndUpdate(id, update, { new: true })
|
||||
if (!request) return res.status(404).json({ message: 'درخواست یافت نشد' })
|
||||
|
||||
if (status === 'انجام شده') {
|
||||
await notifyUser(req.app.get('io'), request.user, {
|
||||
project_post_id: request._id,
|
||||
type: 'wallet_withdrawal',
|
||||
title: 'واریز تسویه کیف پول',
|
||||
description: `درخواست تسویه شما به مبلغ ${request.amount.toLocaleString()} تومان انجام شد.`
|
||||
})
|
||||
}
|
||||
|
||||
return res.status(200).json({ message: 'وضعیت درخواست با موفقیت تغییر کرد', request })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getWalletRequests,
|
||||
updateWalletRequestStatus
|
||||
}
|
||||
Reference in New Issue
Block a user