TF-1813 Implement GetAllSendingEmails for domain and data layer
(cherry picked from commit 35fb38a1ed860cfa65ee57ec6d1e5e715fb1b7a7)
This commit is contained in:
@@ -91,4 +91,6 @@ abstract class EmailDataSource {
|
||||
Future<DetailedEmail?> getIncomingEmailedStored(Session session, AccountId accountId, EmailId emailId);
|
||||
|
||||
Future<void> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
|
||||
|
||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName);
|
||||
}
|
||||
@@ -193,4 +193,9 @@ class EmailDataSourceImpl extends EmailDataSource {
|
||||
Future<void> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_hi
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
|
||||
@@ -251,4 +252,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
||||
return await _sendingEmailCacheManager.storeSendingEmail(accountId, userName, sendingEmail.toHiveCache());
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName) {
|
||||
return Future.sync(() async {
|
||||
final sendingEmailsCache = await _sendingEmailCacheManager.getAllSendingEmails(accountId, userName);
|
||||
return sendingEmailsCache.toSendingEmails();
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/core/extensions/date_time_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/sending_email_hive_cache.dart';
|
||||
|
||||
extension ListSendingEmailHiveCacheExtension on List<SendingEmailHiveCache> {
|
||||
|
||||
List<SendingEmail> toSendingEmails() =>
|
||||
map((sendingEmailCache) => sendingEmailCache.toSendingEmail()).toList();
|
||||
|
||||
void sortByLatestTime() {
|
||||
sort((detailedEmail1, detailedEmail2) {
|
||||
return detailedEmail1.createTime.compareToSort(detailedEmail2.createTime, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:model/extensions/account_id_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/sending_email_hive_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/sending_email_hive_cache.dart';
|
||||
|
||||
class SendingEmailCacheManager {
|
||||
@@ -22,4 +23,11 @@ class SendingEmailCacheManager {
|
||||
log('SendingEmailCacheManager::storeSendingEmail():keyCache: $keyCache | sendingEmailHiveCache: $sendingEmailHiveCache');
|
||||
return _hiveCacheClient.insertItem(keyCache, sendingEmailHiveCache);
|
||||
}
|
||||
|
||||
Future<List<SendingEmailHiveCache>> getAllSendingEmails(AccountId accountId, UserName userName) async {
|
||||
final sendingEmailsCache = await _hiveCacheClient.getListByTupleKey(accountId.asString, userName.value);
|
||||
log('SendingEmailCacheManager::getAllSendingEmails():COUNT: ${sendingEmailsCache.length}');
|
||||
sendingEmailsCache.sortByLatestTime();
|
||||
return sendingEmailsCache;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
|
||||
|
||||
class SendingQueueRepositoryImpl extends SendingQueueRepository {
|
||||
|
||||
final EmailHiveCacheDataSourceImpl _emailHiveCacheDataSourceImpl;
|
||||
|
||||
SendingQueueRepositoryImpl(this._emailHiveCacheDataSourceImpl);
|
||||
|
||||
@override
|
||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName) {
|
||||
return _emailHiveCacheDataSourceImpl.getAllSendingEmails(accountId, userName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||
|
||||
abstract class SendingQueueRepository {
|
||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||
|
||||
class GetAllSendingEmailLoading extends UIState {}
|
||||
|
||||
class GetAllSendingEmailSuccess extends UIState {
|
||||
|
||||
final List<SendingEmail> sendingEmails;
|
||||
|
||||
GetAllSendingEmailSuccess(this.sendingEmails);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [sendingEmails];
|
||||
}
|
||||
|
||||
class GetAllSendingEmailFailure extends FeatureFailure {
|
||||
|
||||
GetAllSendingEmailFailure(dynamic exception) : super(exception: 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:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/state/get_all_sending_email_state.dart';
|
||||
|
||||
class GetAllSendingEmailInteractor {
|
||||
final SendingQueueRepository _sendingQueueRepository;
|
||||
|
||||
GetAllSendingEmailInteractor(this._sendingQueueRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(GetAllSendingEmailLoading());
|
||||
final sendingEmails = await _sendingQueueRepository.getAllSendingEmails(accountId, userName);
|
||||
yield Right<Failure, Success>(GetAllSendingEmailSuccess(sendingEmails));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(GetAllSendingEmailFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user