trackUserLogin method

Future<PamResponse> trackUserLogin(
  1. String custID
)

Implementation

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

      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);
    }
  });
}