From 37e7013dd50384f976e486eec7538a5d9780a371 Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Thu, 29 Dec 2022 17:53:58 +0700 Subject: [PATCH] TF-1289: [Data] Implement DestroySubscription in fcm repository --- .../data/network/fcm_api.dart | 28 +++++++++++++++++++ .../data/repository/fcm_repository_impl.dart | 5 ++++ 2 files changed, 33 insertions(+) diff --git a/lib/features/push_notification/data/network/fcm_api.dart b/lib/features/push_notification/data/network/fcm_api.dart index 1d8d3fc01..280eaa9ff 100644 --- a/lib/features/push_notification/data/network/fcm_api.dart +++ b/lib/features/push_notification/data/network/fcm_api.dart @@ -3,8 +3,11 @@ import 'package:fcm/method/set/firebase_subscription_set_method.dart'; import 'package:fcm/method/set/firebase_subscription_set_response.dart'; import 'package:fcm/method/get/firebase_subscription_get_method.dart'; import 'package:fcm/method/get/firebase_subscription_get_response.dart'; +import 'package:fcm/model/firebase_capability.dart'; import 'package:fcm/model/firebase_subscription.dart'; import 'package:jmap_dart_client/http/http_client.dart'; +import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/jmap_request.dart'; import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart'; import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart'; @@ -62,4 +65,29 @@ class FcmApi { return firebaseSubscriptionSetResponse!.created![newTokenRequest.createRequestId]!; } + + Future destroySubscription(String subscriptionId) async { + final processingInvocation = ProcessingInvocation(); + final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); + + final firebaseSubscriptionSetMethod = FirebaseSubscriptionSetMethod(); + final firebaseSubscriptionSetInvocation = requestBuilder.invocation(firebaseSubscriptionSetMethod); + final response = await (requestBuilder + ..usings({ + CapabilityIdentifier.jmapCore, + FirebaseCapability.fcmIdentifier, + })) + .build() + .execute(); + + final firebaseSubscriptionSetResponse = response.parse( + firebaseSubscriptionSetInvocation.methodCallId, + FirebaseSubscriptionSetResponse.deserialize); + + return Future.sync(() async { + return firebaseSubscriptionSetResponse?.destroyed?.contains(Id(subscriptionId)) == true; + }).catchError((error) { + throw error; + }); + } } \ No newline at end of file diff --git a/lib/features/push_notification/data/repository/fcm_repository_impl.dart b/lib/features/push_notification/data/repository/fcm_repository_impl.dart index 62843a1fd..92fbf7c02 100644 --- a/lib/features/push_notification/data/repository/fcm_repository_impl.dart +++ b/lib/features/push_notification/data/repository/fcm_repository_impl.dart @@ -96,4 +96,9 @@ class FCMRepositoryImpl extends FCMRepository { Future storeSubscription(FCMSubscription fcmSubscription) { return _fcmDatasource[DataSourceType.local]!.storeSubscription(fcmSubscription.toFCMSubscriptionCache()); } + + @override + Future destroySubscription(String subscriptionId) { + return _fcmDatasource[DataSourceType.network]!.destroySubscription(subscriptionId); + } } \ No newline at end of file