TF-1363: [Domain] [Domain] Store, Get, Delete spamReportState in UseCase

This commit is contained in:
HuyNguyen
2023-01-16 12:39:39 +07:00
committed by Dat H. Pham
parent d5b61a2a7d
commit a3dae605a4
13 changed files with 237 additions and 7 deletions
@@ -3,6 +3,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/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/domain/repository/spam_report_repository.dart';
@@ -39,4 +40,19 @@ class SpamReportRepositoryImpl extends SpamReportRepository {
mailboxFilterCondition: mailboxFilterCondition,
limit: limit);
}
@override
Future<SpamReportState> getSpamReportState() {
throw UnimplementedError();
}
@override
Future<void> storeSpamReportState(SpamReportState spamReportState) {
throw UnimplementedError();
}
@override
Future<void> deletestoreSpamReportState() {
throw UnimplementedError();
}
}
@@ -0,0 +1,16 @@
enum SpamReportState {
enabled,
disabled,
}
extension SpamReportStateExtension on SpamReportState {
String get keyValue {
switch(this) {
case SpamReportState.enabled:
return 'enabled';
case SpamReportState.disabled:
return 'disabled';
}
}
}
@@ -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 SpamReportRepository {
@@ -17,4 +18,10 @@ abstract class SpamReportRepository {
UnsignedInt? limit
}
);
Future<SpamReportState> getSpamReportState();
Future<void> storeSpamReportState(SpamReportState spamReportState);
Future<void> deletestoreSpamReportState();
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class DeleteLastTimeDismissedSpamReportedLoading extends UIState {}
class DeleteLastTimeDismissedSpamReportedSuccess extends UIState {
DeleteLastTimeDismissedSpamReportedSuccess();
@override
List<Object> get props => [];
}
class DeleteLastTimeDismissedSpamReportedFailure extends FeatureFailure {
final dynamic exception;
DeleteLastTimeDismissedSpamReportedFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class DeleteSpamReportStateLoading extends UIState {}
class DeleteSpamReportStateSuccess extends UIState {
DeleteSpamReportStateSuccess();
@override
List<Object> get props => [];
}
class DeleteSpamReportStateFailure extends FeatureFailure {
final dynamic exception;
DeleteSpamReportStateFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -0,0 +1,23 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
class GetSpamReportStateLoading extends UIState {}
class GetSpamReportStateSuccess extends UIState {
final SpamReportState spamReportState;
GetSpamReportStateSuccess(this.spamReportState);
@override
List<Object> get props => [spamReportState];
}
class GetSpamReportStateFailure extends FeatureFailure {
final dynamic exception;
GetSpamReportStateFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class StoreSpamReportStateLoading extends UIState {}
class StoreSpamReportStateSuccess extends UIState {
StoreSpamReportStateSuccess();
@override
List<Object> get props => [];
}
class StoreSpamReportStateFailure extends FeatureFailure {
final dynamic exception;
StoreSpamReportStateFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -0,0 +1,21 @@
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/mailbox_dashboard/domain/repository/spam_report_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/delete_last_time_dismissed_spam_reported_state.dart';
class DeleteLastTimeDismissedSpamReportedInteractor {
final SpamReportRepository _spamReportRepository;
DeleteLastTimeDismissedSpamReportedInteractor(this._spamReportRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(DeleteLastTimeDismissedSpamReportedLoading());
await _spamReportRepository.deleteLastTimeDismissedSpamReported();
yield Right<Failure, Success>(DeleteLastTimeDismissedSpamReportedSuccess());
} catch (e) {
yield Left<Failure, Success>(DeleteLastTimeDismissedSpamReportedFailure(e));
}
}
}
@@ -0,0 +1,21 @@
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/mailbox_dashboard/domain/repository/spam_report_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/delete_spam_report_state.dart';
class DeleteSpamReportStateInteractor {
final SpamReportRepository _spamReportRepository;
DeleteSpamReportStateInteractor(this._spamReportRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(DeleteSpamReportStateLoading());
await _spamReportRepository.deletestoreSpamReportState();
yield Right<Failure, Success>(DeleteSpamReportStateSuccess());
} catch (e) {
yield Left<Failure, Success>(DeleteSpamReportStateFailure(e));
}
}
}
@@ -0,0 +1,23 @@
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/mailbox_dashboard/domain/repository/spam_report_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_spam_report_state.dart';
class StoreSpamReportStateInteractor {
final SpamReportRepository _spamReportRepository;
StoreSpamReportStateInteractor(this._spamReportRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(GetSpamReportStateLoading());
final spamReportState = await _spamReportRepository.getSpamReportState();
yield Right<Failure, Success>(GetSpamReportStateSuccess(spamReportState));
} catch (e) {
yield Left<Failure, Success>(GetSpamReportStateFailure(e));
}
}
}
@@ -0,0 +1,23 @@
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/mailbox_dashboard/domain/model/spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/spam_report_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/store_spam_report_state.dart';
class StoreSpamReportStateInteractor {
final SpamReportRepository _spamReportRepository;
StoreSpamReportStateInteractor(this._spamReportRepository);
Stream<Either<Failure, Success>> execute(SpamReportState spamReportState) async* {
try {
yield Right<Failure, Success>(StoreSpamReportStateLoading());
await _spamReportRepository.storeSpamReportState(spamReportState);
yield Right<Failure, Success>(StoreSpamReportStateSuccess());
} catch (e) {
yield Left<Failure, Success>(StoreSpamReportStateFailure(e));
}
}
}