processPayment method

  1. @action
Future<ValueResult> processPayment({
  1. required String depositRequestId,
  2. CheckoutRequest? request,
})

Processa o pagamento delegando pro Orchestrator de acordo com o selectedMethod

Implementation

@action
Future<ValueResult<dynamic>> processPayment({
  required String depositRequestId,
  checkout_request.CheckoutRequest? request,
}) async {
  setLoading(true);
  clearError();

  try {
    final orchestrator = TsdtechClient.instance.orchestrator!;
    ValueResult<dynamic> result;

    if (isCardSelected) {
      if (!validateCardForm()) {
        setLoading(false);
        return ValueResult.failure('Formulário de cartão inválido.');
      }

      final cardData = checkout_request.CardPaymentData(
        cardHolderName: cardHolderName.trim(),
        cardNumber: cardNumber.trim(),
        cardExpiryDate: _toBackendCardExpiry(expiryDate.trim()),
        securityCode: securityCode.trim(),
      );

      result = await orchestrator.payWithCard(request!, cardData);
    } else if (isPixSelected) {
      result = await orchestrator.payWithPix(depositRequestId);

      if (result.isSuccess) {
        final pixResponse = result.value as DepositPixResponse;
        setPixData(
          paymentId: pixResponse.id,
          qrCode: pixResponse.textQrCode,
          copyPasteCode: pixResponse.textQrCode,
          expirationDate: pixResponse.expirationDate,
        );
      }
    } else {
      result = ValueResult.failure('Nenhum método de pagamento selecionado.');
    }

    if (result.isError) {
      setError(result.error);
    }

    return result;
  } catch (e) {
    setError(e.toString());
    return ValueResult.failure(e.toString());
  } finally {
    setLoading(false);
  }
}