TF-1202: Configure FCM

This commit is contained in:
ManhNTX
2022-11-17 13:07:26 +07:00
committed by Dat H. Pham
parent 8276f5b041
commit f94cfe7ee8
34 changed files with 718 additions and 25 deletions
@@ -0,0 +1,9 @@
import 'package:model/firebase/firebase_dto.dart';
abstract class FirebaseDatasource {
Future<FirebaseDto> getCurrentFirebase();
Future<void> setCurrentFirebase(FirebaseDto newCurrentFirebase);
Future<void> deleteCurrentFirebase(String token);
}
@@ -0,0 +1,39 @@
import 'package:model/firebase/firebase_dto.dart';
import 'package:tmail_ui_user/features/push_notification/data/datasource/firebase_datasource.dart';
import 'package:tmail_ui_user/features/push_notification/data/local/firebase_cache_manager.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
class HiveFirebaseDatasourceImpl extends FirebaseDatasource {
final FirebaseCacheManager _firebaseCacheManager;
final ExceptionThrower _exceptionThrower;
HiveFirebaseDatasourceImpl(this._firebaseCacheManager, this._exceptionThrower);
@override
Future<FirebaseDto> getCurrentFirebase() {
return Future.sync(() async {
return await _firebaseCacheManager.getFirebase();
}).catchError((error) {
_exceptionThrower.throwException(error);
});
}
@override
Future<void> setCurrentFirebase(FirebaseDto newCurrentFirebase) {
return Future.sync(() async {
return await _firebaseCacheManager.setFirebase(newCurrentFirebase);
}).catchError((error) {
_exceptionThrower.throwException(error);
});
}
@override
Future<void> deleteCurrentFirebase(String token) {
return Future.sync(() async {
return await _firebaseCacheManager.deleteFirebase(token);
}).catchError((error) {
_exceptionThrower.throwException(error);
});
}
}
@@ -0,0 +1,10 @@
import 'package:model/firebase/firebase_dto.dart';
import 'package:tmail_ui_user/features/push_notification/data/model/firebase_cache.dart';
extension FirebaseCacheExtension on FirebaseCache {
FirebaseDto toFirebaseDto() {
return FirebaseDto(token);
}
}
@@ -0,0 +1,8 @@
import 'package:model/firebase/firebase_dto.dart';
import 'package:tmail_ui_user/features/push_notification/data/model/firebase_cache.dart';
extension FirebaseExtensions on FirebaseDto {
FirebaseCache toCache() {
return FirebaseCache(token);
}
}
@@ -0,0 +1,37 @@
import 'package:core/utils/app_logger.dart';
import 'package:model/firebase/firebase_dto.dart';
import 'package:tmail_ui_user/features/caching/firebase_config_cache_client.dart';
import 'package:tmail_ui_user/features/push_notification/data/extensions/firebase_extensions.dart';
import 'package:tmail_ui_user/features/push_notification/data/model/firebase_cache.dart';
import 'package:tmail_ui_user/features/push_notification/data/extensions/firebase_cache_extensions.dart';
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/firebase_exception.dart';
class FirebaseCacheManager {
final FirebaseCacheClient _firebaseCacheClient;
FirebaseCacheManager(this._firebaseCacheClient);
Future<FirebaseDto> getFirebase() async {
try {
final firebase = await _firebaseCacheClient.getItem(FirebaseCache.keyCacheValue);
if(firebase != null ) {
return firebase.toFirebaseDto();
} else {
throw NotFoundStoredFirebaseException();
}
} catch (e) {
logError('FirebaseCacheManager::getFirebase(): $e');
throw NotFoundStoredFirebaseException();
}
}
Future<void> setFirebase(FirebaseDto firebaseDto) {
log('FirebaseCacheManager::setFirebase(): $_firebaseCacheClient');
return _firebaseCacheClient.insertItem(firebaseDto.token, firebaseDto.toCache());
}
Future<void> deleteFirebase(String token) {
log('FirebaseCacheManager::deleteSelectedFirebase(): $token');
return _firebaseCacheClient.deleteItem(token);
}
}
@@ -0,0 +1,19 @@
import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart';
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
part 'firebase_cache.g.dart';
@HiveType(typeId: CachingConstants.FIREBASE_CONFIG_CACHE_IDENTITY)
class FirebaseCache extends HiveObject with EquatableMixin {
static const String keyCacheValue = 'firebaseCache';
@HiveField(0)
final String token;
FirebaseCache(this.token);
@override
List<Object?> get props => [token];
}
@@ -0,0 +1,27 @@
import 'package:core/utils/app_logger.dart';
import 'package:model/firebase/firebase_dto.dart';
import 'package:tmail_ui_user/features/push_notification/data/datasource/firebase_datasource.dart';
import 'package:tmail_ui_user/features/push_notification/domain/repository/firebase_repository.dart';
class FirebaseRepositoryImpl extends FirebaseRepository {
final FirebaseDatasource _firebaseDatasource;
FirebaseRepositoryImpl(this._firebaseDatasource);
@override
Future<FirebaseDto> getCurrentFirebase() {
return _firebaseDatasource.getCurrentFirebase();
}
@override
Future<void> setCurrentFirebase(FirebaseDto newCurrentFirebase) {
log('FirebaseRepositoryImpl::setCurrentFirebase(): $newCurrentFirebase');
return _firebaseDatasource.setCurrentFirebase(newCurrentFirebase);
}
@override
Future<void> deleteCurrentFirebase(String token) {
return _firebaseDatasource.deleteCurrentFirebase(token);
}
}