Модель данных для платежей Stripe в Firestore
Я следую руководству ( https://angularfirebase.com/lessons/collect-payments-with-angular-stripe-checkout-and-firebase/), предоставленному Google для использования Stipe с RTDB, и пытаюсь адаптировать пример для использования с Firestore.
Учебное пособие выполняет следующий вызов для добавления данных в RTDB:
const payment = { token, amount }
return this.db.list(`/payments/${this.userId}`).push(payment)
Мое лучшее предположение о том, как я это сделаю в Firestore:
const payment = {token, 'price':this.props.price}
var db = firebase.firestore()
db.collection('payments').doc(this.props.uid).collection('test').add(payment)
Обратите внимание, что у меня есть коллекция "test", потому что Firestore требует чередовать документы и коллекции. Я это правильный способ структурировать мои данные в Firestore?
2 ответа
У меня была похожая ситуация, когда я перемещал свои данные платежей Stripe из Realtime в Firestore.
То, как я обошел это, состояло в том, чтобы моя коллекция верхнего уровня была пользователями, каждый документ - это пользовательский UID, а у каждого пользовательского документа есть коллекция платежей, в которую я добавляю новые платежи в эту коллекцию.
Я предпочел этот метод, чем иметь поле в виде массива, так как его проще запрашивать.
Пример:
db.collection('users').doc(this.props.uid).collection('payments').add(payment);
Я думаю, что вы могли бы использовать ту же структуру, показанную в примере:
payments<collection>
userId<doc>
paymentId<field> : [
amount: number
token: object
charge: object
]
Обратите внимание, что токен здесь рассматривается как карта. Это решение соответствует вашим потребностям?