Я пытаюсь создать систему, которая обновляет массив платежей, а затем запускает серию функций разрешения для описания платежей клиентов и сохранения этих данных в их модели. Итак, есть массив paymentSchedule и объект paymentStatus. Каждый раз, когда я обновляю массив платежей, мне нужно запускать эту серию команд и обновлять статус. Некоторые вещи, которые я делаю, уже вроде как работают, но есть сбои и зацепки, поэтому мне нужен был метод, который можно было бы повторить, или просто лучшая практика в такой ситуации, которую я мог бы использовать для остальных моих уравнений. Вот примеры того, что я пробовал. (в основном мне нужно 2 findbyidandupdates или как-то еще, чтобы измерить эффективное изменение)
router.put("/:_id/paymentSchedule", auth, async (req, res) => {
const quoteArray = req.body.map(function (payment) {
return parseInt(payment.paymentAmount);
});
const paymentsLeft = req.body.length;
const reducer = (accumulator, currentValue) => accumulator + currentValue;
const quote = quoteArray.reduce(reducer);
const paymentStatus = {
quote,
paymentsLeft,
};
let prospect = await Prospect.findByIdAndUpdate(req.params._id, {
"$push": { "paymentSchedule": req.body },
"$set": { "paymentStatus": paymentStatus },
});
res.json(prospect);
console.log(prospect);
});
vs
try {
let prospect = await Prospect.findByIdAndUpdate(req.params._id, {
$pull: { "paymentSchedule": { "_id": req.query.q } },
});
prospect.save();
prospect = await Prospect.findById(req.params._id);
const { paymentSchedule } = prospect;
const quoteArray = paymentSchedule.map(function (payment) {
return parseInt(payment.paymentAmount);
});
const paymentsLeft = paymentSchedule.length;
const reducer = (accumulator, currentValue) => accumulator + currentValue;
const quote = quoteArray.reduce(reducer);
const paymentStatus = {
quote,
paymentsLeft,
};
let prospect2 = await Prospect.findByIdAndUpdate(req.params._id, {
$set: { "paymentStatus": paymentStatus },
});
res.json(prospect2);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
vs
const updatePayment = async (payment, currentClient, payid) => {
const config = {
headers: {
"Content-Type": "application/json",
},
params: {
_id: currentClient,
},
};
const payobj = { payid };
const res = await axios.put(
`/api/prospects/${currentClient}/paymentSchedule/${payment._id}/paymentId`,
payobj,
config
);
dispatch({
type: UPDATE_PAYMENTSTATUS,
payload: res.data,
});
getPayments(currentClient);
};