mnemo_cards/lib/features/purchase/purchase_deeplink_handler.dart
2024-08-25 00:09:58 +03:00

66 lines
2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:mnemo_cards/di/locator.dart';
import 'package:mnemo_cards/domain/router/dialogs.dart';
import 'package:mnemo_cards/features/analytics/analytics.dart';
import 'package:mnemo_cards/features/deeplinks/deeplinks_manager.dart';
import 'package:mnemo_cards/main.dart';
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
import 'purchase_manager.dart';
class PurchaseDeeplinkHandler implements DeeplinkHandler {
final PurchaseManager _purchaseManager;
PurchaseDeeplinkHandler(this._purchaseManager);
@override
bool canHandle(Uri uri) => uri.host == 'purchase';
@override
void handle(Uri uri) {
final path = uri.path.replaceFirst('/', '');
switch (path) {
case PurchaseInitDeeplink.deeplinkPath:
return _initPurchase(uri);
case PurchaseCheckDeeplink.deeplinkPath:
return _checkPurchase(uri);
}
Analytics.buyDeeplinkError(uri, message: 'Unknown path: ${path}');
}
void _initPurchase(Uri uri) {
final model = PurchaseInitDeeplink.parse(uri);
_purchaseManager.initPurchase(
id: model.id,
productType: model.productType,
paymentId: model.paymentId,
paymentSystem: model.paymentSystem,
source: model.source?.notEmptyOrNull,
);
}
void _checkPurchase(Uri uri) async {
final model = PurchaseCheckDeeplink.parse(uri);
final success = await _purchaseManager.checkPurchase(
product: MnemoCardsProduct(
id: model.id,
type: model.productType,
),
token: model.token,
paymentSystem: model.paymentSystem,
);
if (success) {
if (model.productType == MnemoCardsProductType.pack) {
locator.packUpdater.updatePackAndSaveImages(
model.id,
shouldUpdateHolder: true,
);
} else {
locator.packUpdater.updateAvailablePacks();
locator.userManager.updateUser();
showInfoDialog('Ура! Теперь у вас есть подписка!');
}
} else {
// showErrorDialog('Не уда');
}
}
}