TF-612 Add domain layer for edit email rule filter

This commit is contained in:
dab246
2022-08-11 15:33:42 +07:00
committed by Dat H. Pham
parent 5dd2d4132f
commit b05100ebdc
4 changed files with 83 additions and 0 deletions
@@ -0,0 +1,30 @@
import 'package:core/utils/app_logger.dart';
import 'package:equatable/equatable.dart';
import 'package:rule_filter/rule_filter/tmail_rule.dart';
class EditEmailRuleFilterRequest with EquatableMixin {
final List<TMailRule> currentListTMailRules;
final TMailRule tMailRuleChanged;
EditEmailRuleFilterRequest(this.currentListTMailRules, this.tMailRuleChanged);
List<TMailRule> get listTMailRulesUpdated {
final listRulesUpdated = currentListTMailRules
.map((rule) {
if (rule.id == tMailRuleChanged.id) {
return tMailRuleChanged;
} else {
return rule;
}
})
.toList();
log('EditEmailRuleFilterRequest::listTMailRulesUpdated(): $listRulesUpdated');
return listRulesUpdated;
}
@override
List<Object?> get props => [currentListTMailRules, tMailRuleChanged];
}
@@ -7,6 +7,7 @@ import 'package:rule_filter/rule_filter/tmail_rule.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/delete_email_rule_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_email_rule_filter_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart';
@@ -26,4 +27,6 @@ abstract class ManageAccountRepository {
Future<List<TMailRule>> deleteTMailRule(AccountId accountId, DeleteEmailRuleRequest deleteEmailRuleRequest);
Future<List<TMailRule>> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest);
Future<List<TMailRule>> editEmailRuleFilter(AccountId accountId, EditEmailRuleFilterRequest ruleFilterRequest);
}
@@ -0,0 +1,22 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:rule_filter/rule_filter/tmail_rule.dart';
class EditEmailRuleFilterSuccess extends UIState {
final List<TMailRule> listRulesUpdated;
EditEmailRuleFilterSuccess(this.listRulesUpdated);
@override
List<Object?> get props => [listRulesUpdated];
}
class EditEmailRuleFilterFailure extends FeatureFailure {
final dynamic exception;
EditEmailRuleFilterFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -0,0 +1,28 @@
import 'dart:core';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_email_rule_filter_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_email_rule_filter_state.dart';
class EditEmailRuleFilterInteractor {
final ManageAccountRepository manageAccountRepository;
EditEmailRuleFilterInteractor(this.manageAccountRepository);
Stream<Either<Failure, Success>> execute(
AccountId accountId,
EditEmailRuleFilterRequest ruleFilterRequest
) async* {
try {
final newListRules = await manageAccountRepository
.editEmailRuleFilter(accountId, ruleFilterRequest);
yield Right(EditEmailRuleFilterSuccess(newListRules));
} catch (exception) {
yield Left(EditEmailRuleFilterFailure(exception));
}
}
}