This commit is contained in:
payacom
2026-08-31 20:45:41 +03:30
parent fa9f23c61d
commit 3f416a7a60
367 changed files with 621895 additions and 6443 deletions

View File

@@ -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
}