getUserSubscription method

  1. @override
Future<void> getUserSubscription()
override

Implementation

@override
Future<void> getUserSubscription() async {
  AppConfig.logger.d('getUserSubscription');

  try {
    List<UserSubscription> subscriptions = await UserSubscriptionFirestore().getByUserId(user.id);

    if(subscriptions.isNotEmpty) {
      _userSubscription = subscriptions.firstWhereOrNull((subscription) => subscription.status == SubscriptionStatus.active);
      if(userSubscription?.subscriptionId == user.subscriptionId) {
        _subscriptionLevel = userSubscription?.level ?? SubscriptionLevel.freemium;
        AppConfig.logger.d('User subscriptionId is the same as user.subscriptionId for ${subscriptionLevel.name}');
      } else if(userSubscription?.subscriptionId.isNotEmpty ?? false) {
        user.subscriptionId = userSubscription?.subscriptionId ?? '';
        AppConfig.logger.d('User subscription is different from user.subscriptionId');
      }
    } else if(user.subscriptionId.isNotEmpty) {
      if (CoreUtilities.isWithinFirstMonth(user.createdDate)) {
        _subscriptionLevel = SubscriptionLevel.freeMonth;
        AppConfig.logger.i('User subscriptionId ${user.subscriptionId} is still within free month for SubscriptionLevel ${subscriptionLevel.name}');
      } else {
        AppConfig.logger.w('User subscriptionId ${user.subscriptionId} is out of free month');
        user.subscriptionId = "";
      }
    } else if(user.userRole.value > UserRole.subscriber.value){
      AppConfig.logger.d('No user subscription found');
      _subscriptionLevel = SubscriptionLevel.ambassador;
    }
  } catch (e) {
    AppConfig.logger.e(e.toString());
  }

}