From 7a85c15f9802958a6dd0ab9acfcf83afa2ca5505 Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Mon, 16 Jan 2023 12:56:37 +0700 Subject: [PATCH] TF-1363: [Date] Implement Store, Get, Delete spamReportState in Repository and datasource --- .../datasource/spam_report_datasource.dart | 7 +++++ ...eference_spam_report_data_source_impl.dart | 28 +++++++++++++++++++ .../spam_report_datasource_impl.dart | 16 +++++++++++ ...re_preference_spam_report_data_source.dart | 18 ++++++++++++ .../spam_report_repository_impl.dart | 8 +++--- .../utils/mailbox_dashboard_constant.dart | 2 ++ 6 files changed, 75 insertions(+), 4 deletions(-) diff --git a/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart b/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart index 44ff54005..36505981e 100644 --- a/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart +++ b/lib/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart @@ -1,6 +1,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spam_emails_response.dart'; abstract class SpamReportDataSource { @@ -17,4 +18,10 @@ abstract class SpamReportDataSource { UnsignedInt? limit } ); + + Future getSpamReportState(); + + Future storeSpamReportState(SpamReportState spamReportState); + + Future deletestoreSpamReportState(); } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart index 04af11486..9d36f13e5 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/share_preference_spam_report_data_source_impl.dart @@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spam_emails_response.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; @@ -48,4 +49,31 @@ class SharePreferenceSpamReportDataSourceImpl extends SpamReportDataSource { ) { throw UnimplementedError(); } + + @override + Future deletestoreSpamReportState() { + return Future.sync(() async { + return await _sharePreferenceSpamReportDataSource.deleteLastTimeDismissedSpamReported(); + }).catchError((error) { + _exceptionThrower.throwException(error); + }); + } + + @override + Future getSpamReportState() { + return Future.sync(() async { + return await _sharePreferenceSpamReportDataSource.getSpamReportState(); + }).catchError((error) { + _exceptionThrower.throwException(error); + }); + } + + @override + Future storeSpamReportState(SpamReportState spamReportState) { + return Future.sync(() async { + return await _sharePreferenceSpamReportDataSource.storeSpamReportState(spamReportState); + }).catchError((error) { + _exceptionThrower.throwException(error); + }); + } } diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart index 35bf7f15d..9f00ce1f2 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/spam_report_datasource_impl.dart @@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/spam_report_api.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spam_emails_response.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; @@ -45,4 +46,19 @@ class SpamReportDataSourceImpl extends SpamReportDataSource { throw UnimplementedError(); } + @override + Future deletestoreSpamReportState() { + throw UnimplementedError(); + } + + @override + Future getSpamReportState() { + throw UnimplementedError(); + } + + @override + Future storeSpamReportState(SpamReportState spamReportState) { + throw UnimplementedError(); + } + } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart b/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart index b187bc286..7b8c8a282 100644 --- a/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart +++ b/lib/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart @@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_filter_condition.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/spam_report_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/unread_spam_emails_response.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/utils/mailbox_dashboard_constant.dart'; @@ -39,4 +40,21 @@ class SharePreferenceSpamReportDataSource extends SpamReportDataSource { ) { throw UnimplementedError(); } + + @override + Future deletestoreSpamReportState() async { + return await _sharedPreferences.remove(MailboxDashboardConstant.keySpamReportState); + } + + @override + Future getSpamReportState() async { + final _spamReportState = _sharedPreferences.getString(MailboxDashboardConstant.keySpamReportState) ?? ''; + return _spamReportState == SpamReportState.disabled.keyValue ? SpamReportState.disabled : SpamReportState.enabled; + } + + @override + Future storeSpamReportState(SpamReportState spamReportState) async { + final _spamReportState = spamReportState.keyValue; + return await _sharedPreferences.setString(MailboxDashboardConstant.keySpamReportState, _spamReportState); + } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart b/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart index fd4408c4b..a7756c487 100644 --- a/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart +++ b/lib/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart @@ -42,17 +42,17 @@ class SpamReportRepositoryImpl extends SpamReportRepository { } @override - Future getSpamReportState() { - throw UnimplementedError(); + Future getSpamReportState() async { + return await mapDataSource[DataSourceType.local]!.getSpamReportState(); } @override Future storeSpamReportState(SpamReportState spamReportState) { - throw UnimplementedError(); + return mapDataSource[DataSourceType.local]!.storeSpamReportState(spamReportState); } @override Future deletestoreSpamReportState() { - throw UnimplementedError(); + return mapDataSource[DataSourceType.local]!.deletestoreSpamReportState(); } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/utils/mailbox_dashboard_constant.dart b/lib/features/mailbox_dashboard/utils/mailbox_dashboard_constant.dart index d3c4c6db4..b7ccf67e8 100644 --- a/lib/features/mailbox_dashboard/utils/mailbox_dashboard_constant.dart +++ b/lib/features/mailbox_dashboard/utils/mailbox_dashboard_constant.dart @@ -1,3 +1,5 @@ class MailboxDashboardConstant { static const String keyLastTimeDismissedSpamReported = 'KEY_LAST_TIME_DISMISSED_SPAM_REPORTED'; + + static const String keySpamReportState = 'KEY_SPAM_REPORT_STATE'; } \ No newline at end of file