From 4acc4ce5cb9fba4364aee6864e540d643910628d Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Thu, 29 Dec 2022 17:50:14 +0700 Subject: [PATCH] TF-1289: [Domain] Add DestroySubscription in use-case --- .../domain/repository/fcm_repository.dart | 2 ++ .../state/destroy_subscription_state.dart | 24 +++++++++++++++++++ .../destroy_subscription_interactor.dart | 22 +++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 lib/features/push_notification/domain/state/destroy_subscription_state.dart create mode 100644 lib/features/push_notification/domain/usecases/destroy_subscription_interactor.dart diff --git a/lib/features/push_notification/domain/repository/fcm_repository.dart b/lib/features/push_notification/domain/repository/fcm_repository.dart index 266ad23ab..12bd75b66 100644 --- a/lib/features/push_notification/domain/repository/fcm_repository.dart +++ b/lib/features/push_notification/domain/repository/fcm_repository.dart @@ -30,4 +30,6 @@ abstract class FCMRepository { Future registerNewToken(RegisterNewTokenRequest newTokenRequest); Future getSubscription(); + + Future destroySubscription(String subscriptionId); } \ No newline at end of file diff --git a/lib/features/push_notification/domain/state/destroy_subscription_state.dart b/lib/features/push_notification/domain/state/destroy_subscription_state.dart new file mode 100644 index 000000000..d1de79b2c --- /dev/null +++ b/lib/features/push_notification/domain/state/destroy_subscription_state.dart @@ -0,0 +1,24 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + + +class DestroySubscriptionLoading extends UIState {} + +class DestroySubscriptionSuccess extends UIState { + + final bool destroyedSubscription; + + DestroySubscriptionSuccess(this.destroyedSubscription); + + @override + List get props => [destroyedSubscription]; +} + +class DestroySubscriptionFailure extends FeatureFailure { + final dynamic exception; + + DestroySubscriptionFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/push_notification/domain/usecases/destroy_subscription_interactor.dart b/lib/features/push_notification/domain/usecases/destroy_subscription_interactor.dart new file mode 100644 index 000000000..69022d0e2 --- /dev/null +++ b/lib/features/push_notification/domain/usecases/destroy_subscription_interactor.dart @@ -0,0 +1,22 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart'; +import 'package:tmail_ui_user/features/push_notification/domain/state/destroy_subscription_state.dart'; + +class DestroySubscriptionInteractor { + + final FCMRepository _fcmRepository; + + DestroySubscriptionInteractor(this._fcmRepository); + + Stream> execute(String subscriptionId) async* { + try { + yield Right(DestroySubscriptionLoading()); + final destroyedSubscription = await _fcmRepository.destroySubscription(subscriptionId); + yield Right(DestroySubscriptionSuccess(destroyedSubscription)); + } catch (e) { + yield Left(DestroySubscriptionFailure(e)); + } + } +} \ No newline at end of file