getState method

Future<SplitPaymentStateResponse?> getState(
  1. String splitPaymentId,
  2. String businessId, {
  3. String? operationId,
})

Fetches the current split payment state by split payment ID.

Calls GET /api/SplitPayment/state/{splitPaymentId}. Returns null when no session exists for the given ID.

Implementation

Future<SplitPaymentStateResponse?> getState(
  String splitPaymentId,
  String businessId, {
  String? operationId,
}) async {
  return _monitoring.monitorAction<SplitPaymentStateResponse?>(
    actionName: 'split_get_state',
    provider: 'split_payments',
    action: (_) async {
      final url =
          '$_paymentsUrl/SplitPayment/state/$splitPaymentId?businessId=$businessId';

      _logger.info(
        this,
        'getState: fetching — splitPaymentId=$splitPaymentId, '
        'operationId=$operationId',
      );

      try {
        final response = await _httpClient.get(
          url: url,
          user: _authService.user,
        );

        if (response != null && response.statusCode == 200) {
          final data = response.data is String
              ? jsonDecode(response.data as String) as Map<String, dynamic>
              : response.data as Map<String, dynamic>;

          _logger.info(
            this,
            'getState: succeeded — '
            'state=${data['state']}, splitPaymentId=$splitPaymentId, '
            'operationId=$operationId',
          );
          return SplitPaymentStateResponse.fromJson(data);
        }

        if (response != null && response.statusCode == 404) {
          _logger.info(
            this,
            'getState: no session found for splitPaymentId=$splitPaymentId',
          );
          return null;
        }

        _logger.error(
          this,
          'getState failed: ${response?.statusCode} ${response?.statusMessage}',
        );
        throw PlatformException(
          code: 'GET_STATE_FAILED',
          message:
              'Failed to get split state: ${response?.statusCode ?? 'no response'}',
        );
      } catch (e, st) {
        _logger.error(
          this,
          'Error getting split state: $e',
          error: e,
          stackTrace: st,
        );
        rethrow;
      }
    },
    logAnalytics: true,
    analyticsEventName: 'split_state_fetched',
  );
}