delete method

Future<void> delete({
  1. required DocumentBase<StripePaymentModel> payment,
  2. Duration timeout = const Duration(seconds: 15),
})

Delete the created payment.

作成したpaymentを削除します。

Implementation

Future<void> delete({
  required DocumentBase<StripePaymentModel> payment,
  Duration timeout = const Duration(seconds: 15),
}) async {
  if (_completer != null) {
    return _completer!.future;
  }
  _completer = Completer<void>();
  try {
    final value = payment.value;
    if (value == null) {
      throw Exception(
        "Payment information is empty. Please run [create] method.",
      );
    }
    final modelQuery = collection(userId: userId).modelQuery;
    final paymentCollection = StripePaymentModelCollection(modelQuery);
    final functionsAdapter =
        StripePurchaseMasamuneAdapter.primary.functionsAdapter ??
            FunctionsAdapter.primary;

    await functionsAdapter.execute(
      StripeDeletePaymentAction(
        userId: userId,
        paymentId: payment.uid,
      ),
    );
    await Future.doWhile(() async {
      await Future.delayed(const Duration(milliseconds: 100));
      await paymentCollection.reload();
      return paymentCollection.any((e) => e.uid == payment.uid);
    }).timeout(timeout);
    _completer?.complete();
    _completer = null;
    notifyListeners();
  } catch (e) {
    _completer?.completeError(e);
    _completer = null;
    rethrow;
  } finally {
    _completer?.complete();
    _completer = null;
  }
}