Чтобы иметь возможность заполнять карты от пользователя, вам нужно указать sh идентификатор карты в массиве пользовательских карт при создании платежа. Но я не вижу этой логики c в вашей addPayment
.
Кроме того, как уже упоминалось, вам нужно исправить свою пользовательскую схему, для карт в пользовательской схеме ссылка должна быть "PaymentCard"
. (А для PaymentCard вам нужно исправить ref для клиента на "Customer"
)
Чтобы упростить задачу, я исключу части jwt.verify и опишу свое решение.
Как Я уже сказал, вам нужно сохранить идентификатор созданной карты в массиве карт пользователя:
router.post("/addPayment", async (req, res) => {
try {
const result = await PaymentCard.create(req.body);
const customerId = req.body.owner;
const response = await Customer.findByIdAndUpdate(
customerId,
{
$push: { cards: result._id } //result._id has the value of newly created card
},
{ new: true }
);
res.send(response);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
Допустим, у вас есть этот клиент без какой-либо карты:
{
"cards": [],
"_id": "5e823f6f76322539e0fb1668",
"name": "John",
"surname": "Smith",
"customerStatus": "Regular",
"email": "john@test.com",
"phoneNo": "123123123",
"__v": 0
}
Когда мы добавляем карта с нашим почтовым маршрутом, этот клиент будет выглядеть так:
{
"cards": [
"5e82400776322539e0fb1669"
],
"_id": "5e823f6f76322539e0fb1668",
"name": "John",
"surname": "Smith",
"customerStatus": "Regular",
"email": "john@test.com",
"phoneNo": "123123123",
"__v": 0
}
Добавленный документ карты был:
{
"owner": "5e823f6f76322539e0fb1668",
"nameOnCard": "John Smith",
"cardNumber":"1234123412341234",
"cardIssuer": "VISA",
"cvc": 123,
"exp": 202008
}
Теперь вы можете заполнить карточки пользователя следующим образом:
router.get("/getAll", async (req, res) => {
try {
const customerId = "5e823f6f76322539e0fb1668";
const result = await Customer.findById(customerId).populate("cards");
res.send(result);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
Это даст вам следующий результат:
{
"cards": [
{
"_id": "5e82400776322539e0fb1669",
"owner": "5e823f6f76322539e0fb1668",
"nameOnCard": "John Smith",
"cardNumber": "1234123412341234",
"cardIssuer": "VISA",
"cvc": 123,
"exp": 202008,
"__v": 0
}
],
"_id": "5e823f6f76322539e0fb1668",
"name": "John",
"surname": "Smith",
"customerStatus": "Regular",
"email": "john@test.com",
"phoneNo": "123123123",
"__v": 0
}