Compare commits

..

No commits in common. "d69106adeb1f7e35f85f69545fc56def2dacdba0" and "48c5215c708e62cc275fd327c8a8e5b90506a2f2" have entirely different histories.

28 changed files with 72 additions and 85 deletions

View File

@ -1 +1 @@
{"bricks":{"wyatt_component_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_component_template","ref":"1f3807adb548a7d65ead7f19e8b743462cb6be22"}},"wyatt_package_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_package_template","ref":"1f3807adb548a7d65ead7f19e8b743462cb6be22"}}}} {"bricks":{"wyatt_component_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_component_template","ref":"0d2605717add29556b12ad1145e4457d71f18c18"}},"wyatt_package_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_package_template","ref":"0d2605717add29556b12ad1145e4457d71f18c18"}}}}

View File

@ -27,34 +27,34 @@ class ExampleAuthenticationCubit extends AuthenticationCubit<int> {
Result<Account, AppException> result) async { Result<Account, AppException> result) async {
debugPrint('onReauthenticate'); debugPrint('onReauthenticate');
return Ok(1); return const Ok(1);
} }
@override @override
FutureOrResult<int?> onRefresh(Result<Account, AppException> result) { FutureOrResult<int?> onRefresh(Result<Account, AppException> result) {
debugPrint('onRefresh'); debugPrint('onRefresh');
return Ok(1); return const Ok(1);
} }
@override @override
FutureOrResult<int?> onSignInFromCache(AuthenticationSession<int> session) { FutureOrResult<int?> onSignInFromCache(AuthenticationSession<int> session) {
debugPrint('onSignInFromCache'); debugPrint('onSignInFromCache');
return Ok(1); return const Ok(1);
} }
@override @override
FutureOrResult<void> onSignOut() { FutureOrResult<void> onSignOut() {
debugPrint('onSignOut'); debugPrint('onSignOut');
return Ok(null); return const Ok(null);
} }
@override @override
FutureOrResult<void> onDelete() { FutureOrResult<void> onDelete() {
debugPrint('onDelete'); debugPrint('onDelete');
return Ok(null); return const Ok(null);
} }
} }

View File

@ -30,7 +30,7 @@ class ExampleSignInCubit extends SignInCubit<int> {
Result<Account, AppException> result, WyattForm form) { Result<Account, AppException> result, WyattForm form) {
debugPrint('onSignInWithEmailAndPassword: ${result.ok?.accessToken}'); debugPrint('onSignInWithEmailAndPassword: ${result.ok?.accessToken}');
return Ok(1); return const Ok(1);
} }
@override @override
@ -38,7 +38,7 @@ class ExampleSignInCubit extends SignInCubit<int> {
Result<Account, AppException> result, WyattForm form) { Result<Account, AppException> result, WyattForm form) {
debugPrint('onSignInAnonymously'); debugPrint('onSignInAnonymously');
return Ok(1); return const Ok(1);
} }
@override @override
@ -46,6 +46,6 @@ class ExampleSignInCubit extends SignInCubit<int> {
Result<Account, AppException> result, WyattForm form) { Result<Account, AppException> result, WyattForm form) {
debugPrint('onSignInWithGoogle'); debugPrint('onSignInWithGoogle');
return Ok(1); return const Ok(1);
} }
} }

View File

@ -30,6 +30,6 @@ class ExampleSignUpCubit extends SignUpCubit<int> {
Result<Account, AppException> result, WyattForm form) async { Result<Account, AppException> result, WyattForm form) async {
debugPrint('onSignUpWithEmailAndPassword'); debugPrint('onSignUpWithEmailAndPassword');
return Ok(1); return const Ok(1);
} }
} }

View File

@ -28,7 +28,7 @@ class ExampleEditAccountCubit extends EditAccountCubit<int> {
Result<Account, AppException> result, WyattForm form) async { Result<Account, AppException> result, WyattForm form) async {
debugPrint('onEmailUpdated'); debugPrint('onEmailUpdated');
return Ok(1); return const Ok(1);
} }
@override @override
@ -36,6 +36,6 @@ class ExampleEditAccountCubit extends EditAccountCubit<int> {
Result<Account, AppException> result, WyattForm form) async { Result<Account, AppException> result, WyattForm form) async {
debugPrint('onPasswordUpdated'); debugPrint('onPasswordUpdated');
return Ok(1); return const Ok(1);
} }
} }

View File

@ -20,7 +20,7 @@ import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
/// {@template authentication_cache_data_source} /// {@template authentication_cache_data_source}
/// A data source that manages the cache strategy. /// A data source that manages the cache strategy.
/// {@endtemplate} /// {@endtemplate}
abstract class AuthenticationCacheDataSource<Data> extends BaseDataSource { abstract class AuthenticationCacheDataSource<Data> extends BaseLocalDataSource {
/// {@macro authentication_cache_data_source} /// {@macro authentication_cache_data_source}
const AuthenticationCacheDataSource(); const AuthenticationCacheDataSource();

View File

@ -20,7 +20,8 @@ import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
/// {@template authentication_session_data_source} /// {@template authentication_session_data_source}
/// A data source that manages the current session. /// A data source that manages the current session.
/// {@endtemplate} /// {@endtemplate}
abstract class AuthenticationSessionDataSource<Data> extends BaseDataSource { abstract class AuthenticationSessionDataSource<Data>
extends BaseLocalDataSource {
/// {@macro authentication_session_data_source} /// {@macro authentication_session_data_source}
const AuthenticationSessionDataSource(); const AuthenticationSessionDataSource();

View File

@ -22,7 +22,8 @@ import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
/// It is responsible for all the external communication with the authentication /// It is responsible for all the external communication with the authentication
/// providers. /// providers.
/// {@endtemplate} /// {@endtemplate}
abstract class AuthenticationRemoteDataSource<Data> extends BaseDataSource { abstract class AuthenticationRemoteDataSource<Data>
extends BaseRemoteDataSource {
/// {@macro authentication_remote_data_source} /// {@macro authentication_remote_data_source}
const AuthenticationRemoteDataSource(); const AuthenticationRemoteDataSource();

View File

@ -43,12 +43,12 @@ class EditAccountCubit<Data> extends BaseEditAccountCubit<Data>
Result<Account, AppException> result, Result<Account, AppException> result,
WyattForm form, WyattForm form,
) => ) =>
Ok(null); const Ok(null);
@override @override
FutureOrResult<Data?> onPasswordUpdated( FutureOrResult<Data?> onPasswordUpdated(
Result<Account, AppException> result, Result<Account, AppException> result,
WyattForm form, WyattForm form,
) => ) =>
Ok(null); const Ok(null);
} }

View File

@ -48,19 +48,19 @@ class SignInCubit<Data> extends BaseSignInCubit<Data>
Result<Account, AppException> result, Result<Account, AppException> result,
WyattForm form, WyattForm form,
) => ) =>
Ok(null); const Ok(null);
@override @override
FutureOrResult<Data?> onSignInWithEmailAndPassword( FutureOrResult<Data?> onSignInWithEmailAndPassword(
Result<Account, AppException> result, Result<Account, AppException> result,
WyattForm form, WyattForm form,
) => ) =>
Ok(null); const Ok(null);
@override @override
FutureOrResult<Data?> onSignInWithGoogle( FutureOrResult<Data?> onSignInWithGoogle(
Result<Account, AppException> result, Result<Account, AppException> result,
WyattForm form, WyattForm form,
) => ) =>
Ok(null); const Ok(null);
} }

View File

@ -43,5 +43,5 @@ class SignUpCubit<Data> extends BaseSignUpCubit<Data>
Result<Account, AppException> result, Result<Account, AppException> result,
WyattForm form, WyattForm form,
) => ) =>
Ok(null); const Ok(null);
} }

View File

@ -30,26 +30,26 @@ class TestAuthenticationCubit extends AuthenticationCubit<int> {
TestAuthenticationCubit({required super.authenticationRepository}); TestAuthenticationCubit({required super.authenticationRepository});
@override @override
FutureOrResult<void> onDelete() async => Ok(null); FutureOrResult<void> onDelete() async => const Ok(null);
@override @override
FutureOrResult<int?> onReauthenticate( FutureOrResult<int?> onReauthenticate(
Result<Account, AppException> result, Result<Account, AppException> result,
) async => ) async =>
Ok(null); const Ok(null);
@override @override
FutureOrResult<int?> onRefresh(Result<Account, AppException> result) async => FutureOrResult<int?> onRefresh(Result<Account, AppException> result) async =>
Ok(null); const Ok(null);
@override @override
FutureOrResult<int?> onSignInFromCache( FutureOrResult<int?> onSignInFromCache(
AuthenticationSession<int> session, AuthenticationSession<int> session,
) async => ) async =>
Ok(null); const Ok(null);
@override @override
FutureOrResult<void> onSignOut() async => Ok(null); FutureOrResult<void> onSignOut() async => const Ok(null);
} }
void main() { void main() {
@ -92,7 +92,7 @@ void main() {
build: () => TestAuthenticationCubit( build: () => TestAuthenticationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: AuthenticationState.unknown, seed: () => const AuthenticationState.unknown(),
expect: () => [AuthenticationState<int>.authenticated(session)], expect: () => [AuthenticationState<int>.authenticated(session)],
); );
@ -108,7 +108,7 @@ void main() {
build: () => TestAuthenticationCubit( build: () => TestAuthenticationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: AuthenticationState.unknown, seed: () => const AuthenticationState.unknown(),
expect: () => [const AuthenticationState<int>.unauthenticated()], expect: () => [const AuthenticationState<int>.unauthenticated()],
); );
}); });
@ -119,7 +119,7 @@ void main() {
setUp: () { setUp: () {
when( when(
() => authenticationRepository.signOut(), () => authenticationRepository.signOut(),
).thenAnswer((_) async => Ok(null)); ).thenAnswer((_) async => const Ok(null));
}, },
build: () => TestAuthenticationCubit( build: () => TestAuthenticationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,

View File

@ -84,7 +84,7 @@ void main() {
'invokes sendEmailVerification,', 'invokes sendEmailVerification,',
setUp: () { setUp: () {
when(() => authenticationRepository.sendEmailVerification()) when(() => authenticationRepository.sendEmailVerification())
.thenAnswer((_) async => Ok(null)); .thenAnswer((_) async => const Ok(null));
}, },
build: () => EmailVerificationCubit( build: () => EmailVerificationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
@ -100,12 +100,12 @@ void main() {
'emits success', 'emits success',
setUp: () { setUp: () {
when(() => authenticationRepository.sendEmailVerification()) when(() => authenticationRepository.sendEmailVerification())
.thenAnswer((_) async => Ok(null)); .thenAnswer((_) async => const Ok(null));
}, },
build: () => EmailVerificationCubit( build: () => EmailVerificationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: EmailVerificationState.new, seed: () => const EmailVerificationState(),
act: (cubit) => cubit.sendEmailVerification(), act: (cubit) => cubit.sendEmailVerification(),
expect: () => [ expect: () => [
const EmailVerificationState( const EmailVerificationState(
@ -121,12 +121,12 @@ void main() {
'emits failure', 'emits failure',
setUp: () { setUp: () {
when(() => authenticationRepository.sendEmailVerification()) when(() => authenticationRepository.sendEmailVerification())
.thenAnswer((_) async => Err(const ServerException('erreur'))); .thenAnswer((_) async => const Err(ServerException('erreur')));
}, },
build: () => EmailVerificationCubit( build: () => EmailVerificationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: EmailVerificationState.new, seed: () => const EmailVerificationState(),
act: (cubit) => cubit.sendEmailVerification(), act: (cubit) => cubit.sendEmailVerification(),
expect: () => [ expect: () => [
const EmailVerificationState( const EmailVerificationState(
@ -183,7 +183,7 @@ void main() {
build: () => EmailVerificationCubit( build: () => EmailVerificationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: EmailVerificationState.new, seed: () => const EmailVerificationState(),
act: (cubit) => cubit.checkEmailVerification(), act: (cubit) => cubit.checkEmailVerification(),
expect: () => [ expect: () => [
const EmailVerificationState( const EmailVerificationState(
@ -206,7 +206,7 @@ void main() {
build: () => EmailVerificationCubit( build: () => EmailVerificationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: EmailVerificationState.new, seed: () => const EmailVerificationState(),
act: (cubit) => cubit.checkEmailVerification(), act: (cubit) => cubit.checkEmailVerification(),
expect: () => [ expect: () => [
const EmailVerificationState( const EmailVerificationState(
@ -222,12 +222,12 @@ void main() {
'emits failure on refresh error', 'emits failure on refresh error',
setUp: () { setUp: () {
when(() => authenticationRepository.refresh()) when(() => authenticationRepository.refresh())
.thenAnswer((_) async => Err(const ServerException('erreur'))); .thenAnswer((_) async => const Err(ServerException('erreur')));
}, },
build: () => EmailVerificationCubit( build: () => EmailVerificationCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
seed: EmailVerificationState.new, seed: () => const EmailVerificationState(),
act: (cubit) => cubit.checkEmailVerification(), act: (cubit) => cubit.checkEmailVerification(),
expect: () => [ expect: () => [
const EmailVerificationState( const EmailVerificationState(

View File

@ -57,7 +57,7 @@ void main() {
() => authenticationRepository.sendPasswordResetEmail( () => authenticationRepository.sendPasswordResetEmail(
email: any(named: 'email'), email: any(named: 'email'),
), ),
).thenAnswer((_) async => Ok(null)); ).thenAnswer((_) async => const Ok(null));
when( when(
() => authenticationRepository.formRepository, () => authenticationRepository.formRepository,
@ -157,7 +157,7 @@ void main() {
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,
), ),
act: (cubit) => cubit.submit(), act: (cubit) => cubit.submit(),
expect: () => <PasswordResetState>[], expect: () => const <PasswordResetState>[],
); );
blocTest<PasswordResetCubit<int>, PasswordResetState>( blocTest<PasswordResetCubit<int>, PasswordResetState>(
@ -272,7 +272,7 @@ void main() {
() => authenticationRepository.sendPasswordResetEmail( () => authenticationRepository.sendPasswordResetEmail(
email: any(named: 'email'), email: any(named: 'email'),
), ),
).thenAnswer((_) async => Err(const ServerException())); ).thenAnswer((_) async => const Err(ServerException()));
when( when(
() => formRepository.accessForm(AuthFormName.passwordResetForm), () => formRepository.accessForm(AuthFormName.passwordResetForm),
).thenAnswer( ).thenAnswer(

View File

@ -435,7 +435,7 @@ void main() {
email: any(named: 'email'), email: any(named: 'email'),
password: any(named: 'password'), password: any(named: 'password'),
), ),
).thenAnswer((_) async => Err(const ServerException())); ).thenAnswer((_) async => const Err(ServerException()));
when( when(
() => formRepository.accessForm(AuthFormName.signInForm), () => formRepository.accessForm(AuthFormName.signInForm),
).thenAnswer( ).thenAnswer(
@ -615,7 +615,7 @@ void main() {
setUp: () { setUp: () {
when( when(
() => authenticationRepository.signInAnonymously(), () => authenticationRepository.signInAnonymously(),
).thenAnswer((_) async => Err(const ServerException())); ).thenAnswer((_) async => const Err(ServerException()));
}, },
build: () => SignInCubit( build: () => SignInCubit(
authenticationRepository: authenticationRepository, authenticationRepository: authenticationRepository,

View File

@ -406,7 +406,7 @@ void main() {
email: any(named: 'email'), email: any(named: 'email'),
password: any(named: 'password'), password: any(named: 'password'),
), ),
).thenAnswer((_) async => Err(const ServerException())); ).thenAnswer((_) async => const Err(ServerException()));
when( when(
() => formRepository.accessForm(AuthFormName.signUpForm), () => formRepository.accessForm(AuthFormName.signUpForm),
).thenAnswer( ).thenAnswer(

View File

@ -17,12 +17,12 @@
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart';
class InitCloudmessagingUseCase extends NoParamsAsyncUseCase<void> { class InitCloudmessagingUseCase extends AsyncUseCase<NoParam, void> {
InitCloudmessagingUseCase({ InitCloudmessagingUseCase({
required CloudMessagingRepository notificationRepository, required CloudMessagingRepository notificationRepository,
}) : _notificationRepository = notificationRepository; }) : _notificationRepository = notificationRepository;
final CloudMessagingRepository _notificationRepository; final CloudMessagingRepository _notificationRepository;
@override @override
FutureOrResult<void> execute() => FutureOrResult<void> execute(NoParam? params) =>
_notificationRepository.init(); _notificationRepository.init();
} }

View File

@ -24,13 +24,13 @@ import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_me
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
class ListenNotificationUseCase class ListenNotificationUseCase
extends NoParamsAsyncUseCase<Stream<RemoteNotification>> { extends StreamUseCase<NoParam, RemoteNotification> {
ListenNotificationUseCase({ ListenNotificationUseCase({
required CloudMessagingRepository notificationRepository, required CloudMessagingRepository notificationRepository,
}) : _notificationRepository = notificationRepository; }) : _notificationRepository = notificationRepository;
final CloudMessagingRepository _notificationRepository; final CloudMessagingRepository _notificationRepository;
@override @override
FutureOrResult<Stream<RemoteNotification>> execute() async { FutureOrResult<Stream<RemoteNotification>> execute(NoParam? params) async {
Stream<RemoteNotification>? notificationStream; Stream<RemoteNotification>? notificationStream;
final notificationStreamResponse = final notificationStreamResponse =
@ -66,7 +66,7 @@ class ListenNotificationUseCase
} }
if (notificationStream == null) { if (notificationStream == null) {
return Err(const NotificationException('Cannot listen notifications')); return const Err(NotificationException('Cannot listen notifications'));
} }
return Ok(notificationStream); return Ok(notificationStream);

View File

@ -18,9 +18,11 @@ import 'dart:async';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notifications.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notifications.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/listen_notification_use_case.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/listen_notification_use_case.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe_to_notification_topic_use_case.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe_to_notification_topic_use_case.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/unsubscribe_from_notification_topic_use_case.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/unsubscribe_from_notification_topic_use_case.dart';
part 'cloud_messaging_state.dart'; part 'cloud_messaging_state.dart';
@ -44,7 +46,7 @@ class CloudMessagingCubit extends Cubit<CloudmessagingState> {
final OnNotification? handleNotification; final OnNotification? handleNotification;
Future<void> listenNotification() async { Future<void> listenNotification() async {
final notificaitons = await _listenNotification.execute(); final notificaitons = await _listenNotification.execute(const NoParam());
if (notificaitons.isOk) { if (notificaitons.isOk) {
notificaitons.ok?.listen((notification) { notificaitons.ok?.listen((notification) {
emit(CloudmessagingState(notification)); emit(CloudmessagingState(notification));

View File

@ -1,23 +0,0 @@
// Copyright (C) 2024 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:io';
import 'package:wyatt_continuous_deployment_example/main.dart';
void main(List<String> args) {
WyattContinuousDeploymentExample.run(args).then((_) => exit(0));
}

View File

@ -20,7 +20,7 @@ class WyattContinuousDeploymentExample {
static Future<void> run(List<String> args) async { static Future<void> run(List<String> args) async {
const useCase = CheckToolsUsecase(); const useCase = CheckToolsUsecase();
final result = await useCase(); final result = await useCase(null);
result.fold((value) => print('Success'), (error) => print('Error: $error')); result.fold((value) => print('Success'), (error) => print('Error: $error'));
} }

View File

@ -66,7 +66,7 @@ class InitProjectTask extends TaskCubit {
// 2. Check tools // 2. Check tools
emit(TaskStateCheckTools()); emit(TaskStateCheckTools());
final checkToolsResult = await checkToolsUsecase(); final checkToolsResult = await checkToolsUsecase(null);
if (checkToolsResult.isErr) { if (checkToolsResult.isErr) {
return emit(TaskStateError.fromRes(checkToolsResult)); return emit(TaskStateError.fromRes(checkToolsResult));
} }

View File

@ -62,7 +62,7 @@ abstract class TaskCubit extends Cubit<TaskState> {
if (checks) { if (checks) {
emit(TaskStateCheckTools()); emit(TaskStateCheckTools());
final checkToolsResult = await _checkToolsUsecase(); final checkToolsResult = await _checkToolsUsecase(null);
if (checkToolsResult.isErr) { if (checkToolsResult.isErr) {
return emit(TaskStateError.fromRes(checkToolsResult)); return emit(TaskStateError.fromRes(checkToolsResult));
} }

View File

@ -49,9 +49,9 @@ class Flutter {
final FlutterBuildIpaUsecase _flutterBuildIpaUsecase; final FlutterBuildIpaUsecase _flutterBuildIpaUsecase;
final FlutterBuildAppBundleUsecase _flutterBuildAppBundleUsecase; final FlutterBuildAppBundleUsecase _flutterBuildAppBundleUsecase;
FutureOrResult<void> clean() => _flutterCleanUsecase(); FutureOrResult<void> clean() => _flutterCleanUsecase(null);
FutureOrResult<void> getDependencies() => _flutterPubGetUsecase(); FutureOrResult<void> getDependencies() => _flutterPubGetUsecase(null);
FutureOrResult<void> createXcArchive() => _flutterBuildXcarchiveUsecase(); FutureOrResult<void> createXcArchive() => _flutterBuildXcarchiveUsecase(null);
FutureOrResult<void> buildIpa(List<String> args) => FutureOrResult<void> buildIpa(List<String> args) =>
_flutterBuildIpaUsecase(args); _flutterBuildIpaUsecase(args);
FutureOrResult<void> buildAppBundle(List<String> args) => FutureOrResult<void> buildAppBundle(List<String> args) =>

View File

@ -19,6 +19,7 @@ import 'dart:io';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_continuous_deployment/src/core/utils/logging.dart'; import 'package:wyatt_continuous_deployment/src/core/utils/logging.dart';
import 'package:wyatt_continuous_deployment/src/domain/usecases/usecase.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
abstract class ProcessUsecase<T> extends AsyncUseCase<T, void> { abstract class ProcessUsecase<T> extends AsyncUseCase<T, void> {
@ -57,7 +58,7 @@ abstract class ProcessUsecase<T> extends AsyncUseCase<T, void> {
} }
progress.complete(onCompletedMessage); progress.complete(onCompletedMessage);
logger.detail(processResult?.stdout.toString().trim()); logger.detail(processResult?.stdout.toString().trim());
return Ok(null); return const Ok(null);
} }
/// Run the process with the given parameters. /// Run the process with the given parameters.
@ -80,7 +81,7 @@ abstract class ProcessNoParamsUsecase extends NoParamsAsyncUseCase<void> {
String get onErrorMessage; String get onErrorMessage;
@override @override
FutureOrResult<void> execute() async { FutureOrResult<void> execute(void params) async {
final progress = logger.progress(onStartedMessage); final progress = logger.progress(onStartedMessage);
final processResult = await run(); final processResult = await run();
if (processResult != null) { if (processResult != null) {
@ -93,7 +94,7 @@ abstract class ProcessNoParamsUsecase extends NoParamsAsyncUseCase<void> {
} }
progress.complete(onCompletedMessage); progress.complete(onCompletedMessage);
logger.detail(processResult?.stdout.toString().trim()); logger.detail(processResult?.stdout.toString().trim());
return Ok(null); return const Ok(null);
} }
/// Run the process with no parameters. /// Run the process with no parameters.

View File

@ -27,7 +27,7 @@ class CheckToolsUsecase extends NoParamsAsyncUseCase<void> {
const CheckToolsUsecase() : super(); const CheckToolsUsecase() : super();
@override @override
FutureOrResult<void> execute() async => unsafeAsync(() async { FutureOrResult<void> execute(void params) async => unsafeAsync(() async {
final missingTools = <String>[]; final missingTools = <String>[];
for (final tool in AppConstants.requiredTools) { for (final tool in AppConstants.requiredTools) {
final isInstalled = await checkToolInstalled(tool); final isInstalled = await checkToolInstalled(tool);

View File

@ -17,6 +17,7 @@
import 'dart:async'; import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_continuous_deployment/src/core/extensions/object_extension.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
typedef Res<T> = Result<T, AppException>; typedef Res<T> = Result<T, AppException>;
@ -27,3 +28,7 @@ FutureOrResult<T> unsafeAsync<T>(FutureOr<T> Function() fn) =>
() async => fn.call(), () async => fn.call(),
(error) => error.toException(), (error) => error.toException(),
); );
abstract class NoParamsAsyncUseCase<T> extends AsyncUseCase<void, T> {
const NoParamsAsyncUseCase();
}

View File

@ -1,7 +1,7 @@
name: wyatt_packages_workspace name: wyatt_packages_workspace
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=2.18.0 <3.0.0'
dev_dependencies: dev_dependencies:
melos: ^5.2.2 melos: ^3.0.1