TF-1068 add recent url

This commit is contained in:
sherlockvn
2022-10-20 14:17:20 +07:00
committed by Dat H. Pham
parent 69e7715734
commit 36e3634c71
14 changed files with 312 additions and 0 deletions
@@ -0,0 +1,5 @@
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
abstract class LoginUrlDataSource {
Future<void> saveLoginUrl(RecentLoginUrl baseUrl);
}
@@ -0,0 +1,26 @@
import 'package:tmail_ui_user/features/caching/recent_login_url_cache_client.dart';
import 'package:tmail_ui_user/features/login/data/datasource/login_url_datasource.dart';
import 'package:tmail_ui_user/features/login/data/model/recent_login_url_cache.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
class LoginUrlDataSourceImpl implements LoginUrlDataSource {
final RecentLoginUrlCacheClient _recentLoginUrlCacheClient;
LoginUrlDataSourceImpl(this._recentLoginUrlCacheClient);
@override
Future<void> saveLoginUrl(RecentLoginUrl recentLoginUrl) {
return Future.sync(() async {
final tmpRecentLoginUrl = recentLoginUrl.url.toString();
if(await _recentLoginUrlCacheClient.isExistItem(tmpRecentLoginUrl)){
await _recentLoginUrlCacheClient.updateItem(tmpRecentLoginUrl, recentLoginUrl.toRecentLoginUrlCache());
} else {
await _recentLoginUrlCacheClient.insertItem(tmpRecentLoginUrl, recentLoginUrl.toRecentLoginUrlCache());
}
}).catchError((error) {
throw error;
});
}
}
@@ -0,0 +1,38 @@
import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart';
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
part 'recent_login_url_cache.g.dart';
@HiveType(typeId: CachingConstants.LOGIN_URL_CACHE_IDENTITY)
class RecentLoginUrlCache extends HiveObject with EquatableMixin {
@HiveField(0)
final Uri url;
@HiveField(1)
final DateTime creationDate;
RecentLoginUrlCache(this.url, this.creationDate);
@override
List<Object?> get props => [url, creationDate];
}
extension RecentLoginUrlExtension on RecentLoginUrl {
RecentLoginUrlCache toRecentLoginUrlCache() {
return RecentLoginUrlCache(url, creationDate);
}
}
extension RecentLoginUrlCacheExtension on RecentLoginUrlCache {
RecentLoginUrl toRecentLoginUrl() {
return RecentLoginUrl(url, creationDate);
}
bool matchUrl(Uri pattern) {
return url.toString().toLowerCase().contains(pattern.toString().toLowerCase());
}
}
@@ -0,0 +1,14 @@
import 'package:tmail_ui_user/features/login/data/datasource/login_url_datasource.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
import 'package:tmail_ui_user/features/login/domain/repository/login_url_repository.dart';
class LoginUrlRepositoryImpl implements LoginUrlRepository {
final LoginUrlDataSource loginInfoDataSource;
LoginUrlRepositoryImpl(this.loginInfoDataSource);
@override
Future<void> saveRecentLoginUrl(RecentLoginUrl recentLogin) {
return loginInfoDataSource.saveLoginUrl(recentLogin);
}
}