migration to address book service

This commit is contained in:
Stephan D
2025-12-05 02:30:49 +01:00
parent f71cc76f64
commit 2754a7aa13
10 changed files with 158 additions and 66 deletions

View File

@@ -1,7 +1,11 @@
import 'package:pshared/models/describable.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/payment/methods/card.dart';
import 'package:pshared/models/payment/methods/crypto_address.dart';
import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/payment/methods/iban.dart';
import 'package:pshared/models/payment/methods/russian_bank.dart';
import 'package:pshared/models/payment/methods/wallet.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/permissions/bound.dart';
import 'package:pshared/models/permissions/bound/storable.dart';
import 'package:pshared/models/storable.dart';
@@ -28,6 +32,19 @@ class PaymentMethod implements PermissionBoundStorable, Describable {
PaymentType get type => data.type;
T dataAs<T extends PaymentMethodData>() {
final currentData = data;
if (currentData is T) return currentData;
throw StateError('Payment method data is ${currentData.runtimeType}, requested $T for type $type');
}
T? dataAsOrNull<T extends PaymentMethodData>() => data is T ? data as T : null;
CardPaymentMethod? get cardData => dataAsOrNull<CardPaymentMethod>();
IbanPaymentMethod? get ibanData => dataAsOrNull<IbanPaymentMethod>();
RussianBankAccountPaymentMethod? get bankAccountData => dataAsOrNull<RussianBankAccountPaymentMethod>();
WalletPaymentMethod? get walletData => dataAsOrNull<WalletPaymentMethod>();
CryptoAddressPaymentMethod? get cryptoAddressData => dataAsOrNull<CryptoAddressPaymentMethod>();
@override
String get id => storable.id;
@override

View File

@@ -10,17 +10,19 @@ import 'package:pshared/service/recipient/pmethods.dart';
class PaymentMethodsProvider extends GenericProvider<PaymentMethod> {
late OrganizationsProvider _organizations;
late RecipientsProvider _recipients;
PaymentMethodsProvider() : super(service: PaymentMethodService.basicService);
List<PaymentMethod> get methods => List<PaymentMethod>.unmodifiable(items.toList()..sort((a, b) => a.storable.createdAt.compareTo(b.storable.createdAt)));
void updateProviders(OrganizationsProvider organizations, RecipientsProvider recipients) {
if (recipients.currentObject != null) loadMethods(organizations, recipients.currentObject?.id);
}
Future<void> loadMethods(OrganizationsProvider organizations, String? recipientRef) async {
_organizations = organizations;
_recipients = recipients;
if (_organizations.isOrganizationSet && (_recipients.currentObject != null)) {
load(_organizations.current.id, _recipients.currentObject!.id);
if (_organizations.isOrganizationSet && (recipientRef != null)) {
return load(_organizations.current.id, recipientRef);
}
}