From 08a9a74de1b1ea9568b1e5c2e7b8a5f4660d09f8 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 21 Oct 2021 14:38:36 +0700 Subject: [PATCH] TF-148 Add domain layer for cleanup email cache --- .../cleanup/domain/model/cleanup_rule.dart | 22 +++++++++++++++++++ .../domain/repository/cleanup_repository.dart | 5 +++++ .../state/cleanup_email_cache_state.dart | 18 +++++++++++++++ .../cleanup_email_cache_interactor.dart | 20 +++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 lib/features/cleanup/domain/model/cleanup_rule.dart create mode 100644 lib/features/cleanup/domain/repository/cleanup_repository.dart create mode 100644 lib/features/cleanup/domain/state/cleanup_email_cache_state.dart create mode 100644 lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart diff --git a/lib/features/cleanup/domain/model/cleanup_rule.dart b/lib/features/cleanup/domain/model/cleanup_rule.dart new file mode 100644 index 000000000..26e9ce1da --- /dev/null +++ b/lib/features/cleanup/domain/model/cleanup_rule.dart @@ -0,0 +1,22 @@ + +import 'package:equatable/equatable.dart'; + +class CleanupRule with EquatableMixin { + final Duration cachingEmailPeriod; + + CleanupRule(this.cachingEmailPeriod); + + @override + List get props => [cachingEmailPeriod]; +} + +class Duration with EquatableMixin { + static final defaultValue = Duration(7); + + final int countDay; + + Duration(this.countDay); + + @override + List get props => [countDay]; +} \ No newline at end of file diff --git a/lib/features/cleanup/domain/repository/cleanup_repository.dart b/lib/features/cleanup/domain/repository/cleanup_repository.dart new file mode 100644 index 000000000..af4443ea2 --- /dev/null +++ b/lib/features/cleanup/domain/repository/cleanup_repository.dart @@ -0,0 +1,5 @@ +import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; + +abstract class CleanupRepository { + Future cleanEmailCache(CleanupRule cleanupRule); +} diff --git a/lib/features/cleanup/domain/state/cleanup_email_cache_state.dart b/lib/features/cleanup/domain/state/cleanup_email_cache_state.dart new file mode 100644 index 000000000..3b26aa87e --- /dev/null +++ b/lib/features/cleanup/domain/state/cleanup_email_cache_state.dart @@ -0,0 +1,18 @@ +import 'package:core/core.dart'; + +class CleanupEmailCacheSuccess extends UIState { + + CleanupEmailCacheSuccess(); + + @override + List get props => []; +} + +class CleanupEmailCacheFailure extends FeatureFailure { + final exception; + + CleanupEmailCacheFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart b/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart new file mode 100644 index 000000000..64c2a224c --- /dev/null +++ b/lib/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart @@ -0,0 +1,20 @@ +import 'package:core/core.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/repository/cleanup_repository.dart'; +import 'package:tmail_ui_user/features/cleanup/domain/state/cleanup_email_cache_state.dart'; + +class CleanupEmailCacheInteractor { + final CleanupRepository cleanupRepository; + + CleanupEmailCacheInteractor(this.cleanupRepository); + + Future> execute(CleanupRule cleanupRule) async { + try { + await cleanupRepository.cleanEmailCache(cleanupRule); + return Right(CleanupEmailCacheSuccess()); + } catch (e) { + return Left(CleanupEmailCacheFailure(e)); + } + } +} \ No newline at end of file