Модель данных для платежей 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 
                           ]

Обратите внимание, что токен здесь рассматривается как карта. Это решение соответствует вашим потребностям?

Другие вопросы по тегам