trackUserLogin method

Future<PamResponse> trackUserLogin(
  1. String custID, {
  2. Map<String, dynamic>? payload,
})

Implementation

Future<PamResponse> trackUserLogin(String custID,
    {Map<String, dynamic>? payload}) async {
  return await queue.add(() async {
    try {
      var loginPayload = Map<String, dynamic>.from(payload ?? {});
      var notiKey =
          Platform.isAndroid ? "android_notification" : "ios_notification";
      var deletePayload = <String, dynamic>{
        "_delete_media": {notiKey: ""}
      };

      if (config?.loginKey == "") {
        loginPayload["customer"] = custID;
      } else {
        loginPayload[config?.loginKey ?? "customer"] = custID;
      }

      final previousDestination = await _createTrackingDestination();
      final deleteResponse = await _postTrackerTo(
          "delete_media", deletePayload, previousDestination);
      if (deleteResponse.error != null) {
        await _activateCustomer(custID);
        return deleteResponse;
      }

      if (previousDestination.sessionType == _TrackingSessionType.public) {
        final publicLoginResponse =
            await _postTrackerTo("login", loginPayload, previousDestination);
        if (publicLoginResponse.error != null) {
          await _activateCustomer(custID);
          return publicLoginResponse;
        }
      }

      await _activateCustomer(custID);

      final loginDestination = await _createTrackingDestination();
      final response =
          await _postTrackerTo("login", loginPayload, loginDestination);

      final push = await getPushToken();
      if (push != null && response.error == null) {
        await _setDeviceToken(push);
      }

      return response;
    } catch (error, stackTrace) {
      return _createInternalErrorResponse(
          "USER LOGIN ERROR", error, stackTrace);
    }
  });
}