accessCodeCheckIfValid method

  1. @override
Future<Either<RepositoryFailure, (AccessCodeCheckReturn, String)>> accessCodeCheckIfValid(
  1. String code
)
override

Implementation

@override
Future<Either<RepositoryFailure, (AccessCodeCheckReturn validity, String welcomeMessage)>>
    accessCodeCheckIfValid(
  String code,
) async {
  logd('accessCodeCheckIfValid: $code');
  try {
    // Submit the code
    var result = await retryIt(() async => await authCallable.call(
          {
            'action': 'accessCodeCheck',
            'accessCode': code,
            'timezone': (await FlutterTimezone.getLocalTimezone()).identifier,
          },
        ));

    // HttpsCallableResult.data returns Map<Object?, Object?>, not Map<String, dynamic>
    final data = Map<String, dynamic>.from(result.data as Map);

    // Check if the code is valid
    if (data['result'] != 'valid') {
      logd('checkAccessCode: invalid code');
      return right((AccessCodeCheckReturn.invalidCode, ''));
    }

    // Save the access code
    logd('checkAccessCode: valid code');
    _accessCodeCached = code;

    return right((AccessCodeCheckReturn.valid, data['welcomeMessage']));
  } catch (e) {
    loge(StackTrace.current, e.toString());
    return const Left(RepositoryFailure.unexpected);
  }
}