TF-2298 Update expires time when old token has expired
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit fb26afe8f52df6e16476aea8a68f9f92c5c4b001)
This commit is contained in:
@@ -1,16 +1,19 @@
|
||||
|
||||
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:fcm/converter/firebase_registration_expired_time_nullable_converter.dart';
|
||||
import 'package:fcm/method/set/firebase_registration_set_method.dart';
|
||||
import 'package:fcm/method/set/firebase_registration_set_response.dart';
|
||||
import 'package:fcm/method/get/firebase_registration_get_method.dart';
|
||||
import 'package:fcm/method/get/firebase_registration_get_response.dart';
|
||||
import 'package:fcm/model/device_client_id.dart';
|
||||
import 'package:fcm/model/firebase_registration.dart';
|
||||
import 'package:fcm/model/firebase_registration_id.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/core/patch_object.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';
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/model/update_token_expired_time_request.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/utils/fcm_constants.dart';
|
||||
|
||||
class FcmApi {
|
||||
|
||||
@@ -18,76 +21,105 @@ class FcmApi {
|
||||
|
||||
FcmApi(this._httpClient);
|
||||
|
||||
Future<FirebaseSubscription> getFirebaseSubscriptionByDeviceId(String deviceId) async {
|
||||
Future<FirebaseRegistration> getFirebaseRegistrationByDeviceId(DeviceClientId deviceId) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final firebaseSubscriptionGetMethod = FirebaseSubscriptionGetMethod();
|
||||
final firebaseSubscriptionGetInvocation = requestBuilder.invocation(firebaseSubscriptionGetMethod);
|
||||
final firebaseRegistrationGetMethod = FirebaseRegistrationGetMethod();
|
||||
final firebaseRegistrationGetInvocation = requestBuilder.invocation(firebaseRegistrationGetMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(firebaseSubscriptionGetMethod.requiredCapabilities))
|
||||
..usings(firebaseRegistrationGetMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final getResponse = response.parse<FirebaseSubscriptionGetResponse>(
|
||||
firebaseSubscriptionGetInvocation.methodCallId,
|
||||
FirebaseSubscriptionGetResponse.deserialize);
|
||||
final getResponse = response.parse<FirebaseRegistrationGetResponse>(
|
||||
firebaseRegistrationGetInvocation.methodCallId,
|
||||
FirebaseRegistrationGetResponse.deserialize);
|
||||
|
||||
final matchedFirebaseSubscription = getResponse?.list
|
||||
.where((fcmSub) => fcmSub.deviceClientId?.value == deviceId)
|
||||
final matchedFirebaseRegistration = getResponse?.list
|
||||
.where((fcmSub) => fcmSub.deviceClientId == deviceId)
|
||||
.toList();
|
||||
|
||||
if (matchedFirebaseSubscription?.isNotEmpty == true) {
|
||||
return matchedFirebaseSubscription!.first;
|
||||
if (matchedFirebaseRegistration?.isNotEmpty == true) {
|
||||
return matchedFirebaseRegistration!.first;
|
||||
} else {
|
||||
throw NotFoundFirebaseSubscriptionException();
|
||||
throw NotFoundFirebaseRegistrationForDeviceException();
|
||||
}
|
||||
}
|
||||
|
||||
Future<FirebaseSubscription> registerNewToken(RegisterNewTokenRequest newTokenRequest) async {
|
||||
Future<FirebaseRegistration> registerNewFirebaseRegistrationToken(RegisterNewTokenRequest newTokenRequest) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final firebaseSubscriptionSetMethod = FirebaseSubscriptionSetMethod()
|
||||
final firebaseRegistrationSetMethod = FirebaseRegistrationSetMethod()
|
||||
..addCreate(
|
||||
newTokenRequest.createRequestId,
|
||||
newTokenRequest.firebaseSubscription
|
||||
newTokenRequest.firebaseRegistration
|
||||
);
|
||||
final firebaseSubscriptionSetInvocation = requestBuilder.invocation(firebaseSubscriptionSetMethod);
|
||||
final firebaseRegistrationSetInvocation = requestBuilder.invocation(firebaseRegistrationSetMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(firebaseSubscriptionSetMethod.requiredCapabilities))
|
||||
..usings(firebaseRegistrationSetMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final firebaseSubscriptionSetResponse = response.parse<FirebaseSubscriptionSetResponse>(
|
||||
firebaseSubscriptionSetInvocation.methodCallId,
|
||||
FirebaseSubscriptionSetResponse.deserialize);
|
||||
final firebaseRegistrationSetResponse = response.parse<FirebaseRegistrationSetResponse>(
|
||||
firebaseRegistrationSetInvocation.methodCallId,
|
||||
FirebaseRegistrationSetResponse.deserialize);
|
||||
|
||||
return firebaseSubscriptionSetResponse!.created![newTokenRequest.createRequestId]!;
|
||||
final firebaseRegistration = firebaseRegistrationSetResponse?.created?[newTokenRequest.createRequestId];
|
||||
if (firebaseRegistration != null) {
|
||||
return firebaseRegistration;
|
||||
} else {
|
||||
throw NotFoundFirebaseRegistrationCreatedException();
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> destroySubscription(String subscriptionId) async {
|
||||
Future<void> destroyFirebaseRegistration(FirebaseRegistrationId registrationId) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final firebaseSubscriptionSetMethod = FirebaseSubscriptionSetMethod()..addDestroy({Id(subscriptionId)});
|
||||
final firebaseSubscriptionSetInvocation = requestBuilder.invocation(firebaseSubscriptionSetMethod);
|
||||
final firebaseRegistrationSetMethod = FirebaseRegistrationSetMethod()..addDestroy({registrationId.id});
|
||||
final firebaseRegistrationSetInvocation = requestBuilder.invocation(firebaseRegistrationSetMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings({
|
||||
CapabilityIdentifier.jmapCore,
|
||||
FirebaseCapability.fcmIdentifier,
|
||||
}))
|
||||
..usings(firebaseRegistrationSetMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final firebaseSubscriptionSetResponse = response.parse<FirebaseSubscriptionSetResponse>(
|
||||
firebaseSubscriptionSetInvocation.methodCallId,
|
||||
FirebaseSubscriptionSetResponse.deserialize);
|
||||
final firebaseRegistrationSetResponse = response.parse<FirebaseRegistrationSetResponse>(
|
||||
firebaseRegistrationSetInvocation.methodCallId,
|
||||
FirebaseRegistrationSetResponse.deserialize);
|
||||
|
||||
return Future.sync(() async {
|
||||
return firebaseSubscriptionSetResponse?.destroyed?.contains(Id(subscriptionId)) == true;
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
if (firebaseRegistrationSetResponse?.destroyed?.contains(registrationId.id) == true) {
|
||||
return;
|
||||
} else {
|
||||
throw NotFoundFirebaseRegistrationDestroyedException();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateFirebaseRegistrationToken(UpdateTokenExpiredTimeRequest expiredTimeRequest) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final firebaseRegistrationSetMethod = FirebaseRegistrationSetMethod()
|
||||
..addUpdates({
|
||||
expiredTimeRequest.firebaseRegistrationId.id: PatchObject({
|
||||
FcmConstants.firebaseRegistrationExpiredTimeProperty: const FirebaseRegistrationExpiredTimeNullableConverter().toJson(expiredTimeRequest.firebaseRegistrationExpiredTime)
|
||||
})
|
||||
});
|
||||
final firebaseRegistrationSetInvocation = requestBuilder.invocation(firebaseRegistrationSetMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(firebaseRegistrationSetMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final firebaseRegistrationSetResponse = response.parse<FirebaseRegistrationSetResponse>(
|
||||
firebaseRegistrationSetInvocation.methodCallId,
|
||||
FirebaseRegistrationSetResponse.deserialize);
|
||||
|
||||
if (firebaseRegistrationSetResponse?.updated?.containsKey(expiredTimeRequest.firebaseRegistrationId.id) == true) {
|
||||
return;
|
||||
} else {
|
||||
throw NotFoundFirebaseRegistrationUpdatedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user