fix(authentication)!: use FutureOrResult extension (close #41)

This commit is contained in:
Hugo Pointcheval 2022-11-24 11:18:16 -05:00
parent f36e0b51e0
commit 626d951443
Signed by: hugo
GPG Key ID: A9E8E9615379254F
3 changed files with 40 additions and 40 deletions

View File

@ -3,7 +3,7 @@
// ----- // -----
// File: app.dart // File: app.dart
// Created Date: 19/08/2022 12:05:38 // Created Date: 19/08/2022 12:05:38
// Last Modified: Thu Nov 10 2022 // Last Modified: Wed Nov 23 2022
// ----- // -----
// Copyright (c) 2022 // Copyright (c) 2022
@ -21,7 +21,7 @@ import 'package:wyatt_form_bloc/wyatt_form_bloc.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
FutureResult<int?> onSignUpSuccess( FutureOrResult<int?> onSignUpSuccess(
Account? account, Account? account,
WyattForm form, WyattForm form,
) async { ) async {
@ -34,7 +34,7 @@ FutureResult<int?> onSignUpSuccess(
return const Ok<int, AppException>(id); return const Ok<int, AppException>(id);
} }
FutureResult<int?> onAccountChanges(Account? account) async { FutureOrResult<int?> onAccountChanges(Account? account) async {
final id = Random().nextInt(1000); final id = Random().nextInt(1000);
debugPrint('onAccountChanges: $account, generatedId: $id'); debugPrint('onAccountChanges: $account, generatedId: $id');
return Ok<int, AppException>(id); return Ok<int, AppException>(id);

View File

@ -29,12 +29,12 @@ import 'package:wyatt_authentication_bloc/src/domain/repositories/authentication
import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
typedef OnSignUpSuccess<T> = FutureResult<T?> Function( typedef OnSignUpSuccess<T> = FutureOrResult<T?> Function(
Account? account, Account? account,
WyattForm form, WyattForm form,
); );
typedef OnAuthChange<T> = FutureResult<T?> Function(Account? account); typedef OnAuthChange<T> = FutureOrResult<T?> Function(Account? account);
class AuthenticationRepositoryImpl<T extends Object> class AuthenticationRepositoryImpl<T extends Object>
extends AuthenticationRepository<T> { extends AuthenticationRepository<T> {
@ -46,7 +46,7 @@ class AuthenticationRepositoryImpl<T extends Object>
final OnSignUpSuccess<T>? _onSignUpSuccess; final OnSignUpSuccess<T>? _onSignUpSuccess;
final OnAuthChange<T>? _onAccountChanges; final OnAuthChange<T>? _onAccountChanges;
final StreamController<FutureResult<AccountWrapper<T>>> _signUpStream = final StreamController<FutureOrResult<AccountWrapper<T>>> _signUpStream =
StreamController(); StreamController();
bool _pause = false; // Semaphore bool _pause = false; // Semaphore
@ -93,7 +93,7 @@ class AuthenticationRepositoryImpl<T extends Object>
FormRepository get formRepository => _formRepository; FormRepository get formRepository => _formRepository;
@override @override
FutureResult<Account> signInWithEmailAndPassword({ FutureOrResult<Account> signInWithEmailAndPassword({
required String email, required String email,
required String password, required String password,
}) => }) =>
@ -111,7 +111,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<void> signOut() => FutureOrResult<void> signOut() =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async { () async {
await _authenticationRemoteDataSource.signOut(); await _authenticationRemoteDataSource.signOut();
@ -121,7 +121,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<Account> signUp({ FutureOrResult<Account> signUp({
required String email, required String email,
required String password, required String password,
}) => }) =>
@ -157,28 +157,28 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<void> destroyCache() => FutureOrResult<void> destroyCache() =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
_authenticationLocalDataSource.destroy, _authenticationLocalDataSource.destroy,
(error) => error, (error) => error,
); );
@override @override
FutureResult<AccountWrapper<T>> getCache() => FutureOrResult<AccountWrapper<T>> getCache() =>
Result.tryCatchAsync<AccountWrapper<T>, AppException, AppException>( Result.tryCatchAsync<AccountWrapper<T>, AppException, AppException>(
_authenticationLocalDataSource.load, _authenticationLocalDataSource.load,
(error) => error, (error) => error,
); );
@override @override
FutureResult<Account> getAccount() => FutureOrResult<Account> getAccount() =>
Result.tryCatchAsync<Account, AppException, AppException>( Result.tryCatchAsync<Account, AppException, AppException>(
_authenticationLocalDataSource.loadAccount, _authenticationLocalDataSource.loadAccount,
(error) => error, (error) => error,
); );
@override @override
FutureResult<void> setAccount( FutureOrResult<void> setAccount(
Account account, Account account,
) => ) =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
@ -189,14 +189,14 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<T> getData() => FutureOrResult<T> getData() =>
Result.tryCatchAsync<T, AppException, AppException>( Result.tryCatchAsync<T, AppException, AppException>(
_authenticationLocalDataSource.loadData, _authenticationLocalDataSource.loadData,
(error) => error, (error) => error,
); );
@override @override
FutureResult<void> setData( FutureOrResult<void> setData(
T? data, T? data,
) => ) =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
@ -207,14 +207,14 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<String> getIdentityToken() => FutureOrResult<String> getIdentityToken() =>
Result.tryCatchAsync<String, AppException, AppException>( Result.tryCatchAsync<String, AppException, AppException>(
_authenticationRemoteDataSource.getIdentityToken, _authenticationRemoteDataSource.getIdentityToken,
(error) => error, (error) => error,
); );
@override @override
Stream<FutureResult<AccountWrapper<T>>> streamAccount() => MergeStream([ Stream<FutureOrResult<AccountWrapper<T>>> streamAccount() => MergeStream([
_signUpStream.stream.asBroadcastStream(), _signUpStream.stream.asBroadcastStream(),
_authenticationRemoteDataSource.streamAccount().map((account) async { _authenticationRemoteDataSource.streamAccount().map((account) async {
if (_onAccountChanges.isNotNull && !_pause) { if (_onAccountChanges.isNotNull && !_pause) {
@ -231,7 +231,7 @@ class AuthenticationRepositoryImpl<T extends Object>
]); ]);
@override @override
FutureResult<void> confirmPasswordReset({ FutureOrResult<void> confirmPasswordReset({
required String code, required String code,
required String newPassword, required String newPassword,
}) => }) =>
@ -246,7 +246,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<void> sendEmailVerification() => FutureOrResult<void> sendEmailVerification() =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async { () async {
await _authenticationRemoteDataSource.sendEmailVerification(); await _authenticationRemoteDataSource.sendEmailVerification();
@ -255,7 +255,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<void> sendPasswordResetEmail({required String email}) => FutureOrResult<void> sendPasswordResetEmail({required String email}) =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async { () async {
await _authenticationRemoteDataSource.sendPasswordResetEmail( await _authenticationRemoteDataSource.sendPasswordResetEmail(
@ -266,7 +266,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<Account> signInAnonymously() => FutureOrResult<Account> signInAnonymously() =>
Result.tryCatchAsync<Account, AppException, AppException>( Result.tryCatchAsync<Account, AppException, AppException>(
() async { () async {
final account = final account =
@ -277,7 +277,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<bool> verifyPasswordResetCode({required String code}) => FutureOrResult<bool> verifyPasswordResetCode({required String code}) =>
Result.tryCatchAsync<bool, AppException, AppException>( Result.tryCatchAsync<bool, AppException, AppException>(
() async { () async {
final response = await _authenticationRemoteDataSource final response = await _authenticationRemoteDataSource
@ -288,7 +288,7 @@ class AuthenticationRepositoryImpl<T extends Object>
); );
@override @override
FutureResult<void> refresh() => FutureOrResult<void> refresh() =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async { () async {
await _authenticationRemoteDataSource.refresh(); await _authenticationRemoteDataSource.refresh();

View File

@ -30,7 +30,7 @@ abstract class AuthenticationRepository<T> extends BaseRepository {
/// Throws a SignUpWithEmailAndPasswordFailureInterface if /// Throws a SignUpWithEmailAndPasswordFailureInterface if
/// an exception occurs. /// an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<Account> signUp({ FutureOrResult<Account> signUp({
required String email, required String email,
required String password, required String password,
}); });
@ -40,21 +40,21 @@ abstract class AuthenticationRepository<T> extends BaseRepository {
/// ///
/// Throws a SendEmailVerificationFailureInterface if an exception occurs. /// Throws a SendEmailVerificationFailureInterface if an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<void> sendEmailVerification(); FutureOrResult<void> sendEmailVerification();
/// {@template send_password_reset_email} /// {@template send_password_reset_email}
/// Sends a password reset email to the provided [email]. /// Sends a password reset email to the provided [email].
/// ///
/// Throws a SendPasswordResetEmailFailureInterface if an exception occurs. /// Throws a SendPasswordResetEmailFailureInterface if an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<void> sendPasswordResetEmail({required String email}); FutureOrResult<void> sendPasswordResetEmail({required String email});
/// {@template confirm_password_reset} /// {@template confirm_password_reset}
/// Confirms the password reset with the provided [newPassword] and [code]. /// Confirms the password reset with the provided [newPassword] and [code].
/// ///
/// Throws a ConfirmPasswordResetFailureInterface if an exception occurs. /// Throws a ConfirmPasswordResetFailureInterface if an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<void> confirmPasswordReset({ FutureOrResult<void> confirmPasswordReset({
required String code, required String code,
required String newPassword, required String newPassword,
}); });
@ -64,14 +64,14 @@ abstract class AuthenticationRepository<T> extends BaseRepository {
/// ///
/// Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs. /// Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<bool> verifyPasswordResetCode({required String code}); FutureOrResult<bool> verifyPasswordResetCode({required String code});
/// {@template signin_anom} /// {@template signin_anom}
/// Sign in anonymously. /// Sign in anonymously.
/// ///
/// Throws a SignInAnonymouslyFailureInterface if an exception occurs. /// Throws a SignInAnonymouslyFailureInterface if an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<Account> signInAnonymously(); FutureOrResult<Account> signInAnonymously();
/// {@template signin_pwd} /// {@template signin_pwd}
/// Signs in with the provided [email] and [password]. /// Signs in with the provided [email] and [password].
@ -79,7 +79,7 @@ abstract class AuthenticationRepository<T> extends BaseRepository {
/// Throws a SignInWithEmailAndPasswordFailureInterface if /// Throws a SignInWithEmailAndPasswordFailureInterface if
/// an exception occurs. /// an exception occurs.
/// {@endtemplate} /// {@endtemplate}
FutureResult<Account> signInWithEmailAndPassword({ FutureOrResult<Account> signInWithEmailAndPassword({
required String email, required String email,
required String password, required String password,
}); });
@ -88,9 +88,9 @@ abstract class AuthenticationRepository<T> extends BaseRepository {
/// Signs out the current user. /// Signs out the current user.
/// It also clears the cache and the associated data. /// It also clears the cache and the associated data.
/// {@endtemplate} /// {@endtemplate}
FutureResult<void> signOut(); FutureOrResult<void> signOut();
FutureResult<void> refresh(); FutureOrResult<void> refresh();
/// {@template stream_account} /// {@template stream_account}
/// Stream of [AccountWrapper] which will emit the current account when /// Stream of [AccountWrapper] which will emit the current account when
@ -99,16 +99,16 @@ abstract class AuthenticationRepository<T> extends BaseRepository {
/// Emits [AccountWrapper] with null [Account] if the user is not /// Emits [AccountWrapper] with null [Account] if the user is not
/// authenticated. /// authenticated.
/// {@endtemplate} /// {@endtemplate}
Stream<FutureResult<AccountWrapper<T>>> streamAccount(); Stream<FutureOrResult<AccountWrapper<T>>> streamAccount();
FutureResult<String> getIdentityToken(); FutureOrResult<String> getIdentityToken();
FutureResult<Account> getAccount(); FutureOrResult<Account> getAccount();
FutureResult<void> setAccount(Account account); FutureOrResult<void> setAccount(Account account);
FutureResult<T> getData(); FutureOrResult<T> getData();
FutureResult<void> setData(T? data); FutureOrResult<void> setData(T? data);
FutureResult<AccountWrapper<T>> getCache(); FutureOrResult<AccountWrapper<T>> getCache();
FutureResult<void> destroyCache(); FutureOrResult<void> destroyCache();
} }