getVisitorHistory method

Future<Map<String, dynamic>> getVisitorHistory(
  1. VisitorHistoryFilter filter
)

Fetches visitor history using the provided VisitorHistoryFilter.

Implementation

Future<Map<String, dynamic>> getVisitorHistory(
  VisitorHistoryFilter filter,
) async {
  if (filter.visitorId == null || filter.visitorId!.isEmpty) {
    throw SdkError(
      message: 'Visitor ID is required to fetch history',
      code: 'MISSING_VISITOR_ID',
      details: 'Pass a valid visitorId in VisitorHistoryFilter.',
    );
  }

  final queryParameters = filter.toJson()
    ..remove('visitorId'); // don't duplicate visitorId in query params

  final queryString = queryParameters.entries
      .map(
        (e) =>
            '${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value.toString())}',
      )
      .join('&');

  final url = Uri.parse(
    '$baseUrl/visitors/${filter.visitorId}/history?$queryString',
  );

  final response = await http
      .get(
        url,
        headers: {
          'Authorization': 'Bearer $apiKey',
          'Content-Type': 'application/json',
        },
      )
      .timeout(timeout);

  if (response.statusCode == 200) {
    return jsonDecode(response.body) as Map<String, dynamic>;
  } else {
    throw Exception(
      'Failed to fetch visitor history [${response.statusCode}]: ${response.body}',
    );
  }
}