From 8e46bc60619b5fe0de4af458381118b92110a0b4 Mon Sep 17 00:00:00 2001 From: Stephan D Date: Thu, 22 Jan 2026 01:00:55 +0100 Subject: [PATCH] ledger account service basis --- .../lib/data/dto/{payment => }/money.dart | 0 .../pshared/lib/data/dto/wallet/balance.dart | 2 +- .../pshared/lib/data/dto/wallet/money.dart | 18 ------ .../lib/data/mapper/{payment => }/money.dart | 15 ++--- .../lib/data/mapper/wallet/balance.dart | 2 +- .../pshared/lib/data/mapper/wallet/money.dart | 10 ---- .../lib/data/mapper/wallet/wallet.dart | 3 +- .../pshared/lib/models/ledger/account.dart | 58 +++++++++++++++++++ .../lib/models/{payment => }/money.dart | 0 .../pshared/lib/models/payment/fees/line.dart | 2 +- .../lib/models/payment/fees/network.dart | 2 +- .../pshared/lib/models/payment/fx/quote.dart | 2 +- .../pshared/lib/models/payment/intent.dart | 2 +- .../lib/models/payment/quote/aggregate.dart | 2 +- .../lib/models/payment/quote/quote.dart | 2 +- .../pshared/lib/models/wallet/balance.dart | 8 +-- frontend/pshared/lib/models/wallet/money.dart | 9 --- .../pshared/lib/models/wallet/wallet.dart | 10 ++-- .../payment/quotation/intent_builder.dart | 2 +- .../provider/payment/quotation/quotation.dart | 2 +- frontend/pshared/lib/service/ledger.dart | 31 ++++++++++ frontend/pshared/lib/service/services.dart | 1 + 22 files changed, 118 insertions(+), 65 deletions(-) rename frontend/pshared/lib/data/dto/{payment => }/money.dart (100%) delete mode 100644 frontend/pshared/lib/data/dto/wallet/money.dart rename frontend/pshared/lib/data/mapper/{payment => }/money.dart (52%) delete mode 100644 frontend/pshared/lib/data/mapper/wallet/money.dart create mode 100644 frontend/pshared/lib/models/ledger/account.dart rename frontend/pshared/lib/models/{payment => }/money.dart (100%) delete mode 100644 frontend/pshared/lib/models/wallet/money.dart create mode 100644 frontend/pshared/lib/service/ledger.dart diff --git a/frontend/pshared/lib/data/dto/payment/money.dart b/frontend/pshared/lib/data/dto/money.dart similarity index 100% rename from frontend/pshared/lib/data/dto/payment/money.dart rename to frontend/pshared/lib/data/dto/money.dart diff --git a/frontend/pshared/lib/data/dto/wallet/balance.dart b/frontend/pshared/lib/data/dto/wallet/balance.dart index 4be200ef..13c34a08 100644 --- a/frontend/pshared/lib/data/dto/wallet/balance.dart +++ b/frontend/pshared/lib/data/dto/wallet/balance.dart @@ -1,6 +1,6 @@ import 'package:json_annotation/json_annotation.dart'; -import 'package:pshared/data/dto/wallet/money.dart'; +import 'package:pshared/data/dto/money.dart'; part 'balance.g.dart'; diff --git a/frontend/pshared/lib/data/dto/wallet/money.dart b/frontend/pshared/lib/data/dto/wallet/money.dart deleted file mode 100644 index 17bf8dcd..00000000 --- a/frontend/pshared/lib/data/dto/wallet/money.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -part 'money.g.dart'; - - -@JsonSerializable() -class MoneyDTO { - final String amount; - final String currency; - - const MoneyDTO({ - required this.amount, - required this.currency, - }); - - factory MoneyDTO.fromJson(Map json) => _$MoneyDTOFromJson(json); - Map toJson() => _$MoneyDTOToJson(this); -} diff --git a/frontend/pshared/lib/data/mapper/payment/money.dart b/frontend/pshared/lib/data/mapper/money.dart similarity index 52% rename from frontend/pshared/lib/data/mapper/payment/money.dart rename to frontend/pshared/lib/data/mapper/money.dart index e2a67fbb..9b2841b3 100644 --- a/frontend/pshared/lib/data/mapper/payment/money.dart +++ b/frontend/pshared/lib/data/mapper/money.dart @@ -1,16 +1,17 @@ import 'package:pshared/data/dto/payment/money.dart'; -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; + extension MoneyMapper on Money { MoneyDTO toDTO() => MoneyDTO( - amount: amount, - currency: currency, - ); + amount: amount, + currency: currency, + ); } extension MoneyDTOMapper on MoneyDTO { Money toDomain() => Money( - amount: amount, - currency: currency, - ); + amount: amount, + currency: currency, + ); } diff --git a/frontend/pshared/lib/data/mapper/wallet/balance.dart b/frontend/pshared/lib/data/mapper/wallet/balance.dart index 0060fa06..5265bbd5 100644 --- a/frontend/pshared/lib/data/mapper/wallet/balance.dart +++ b/frontend/pshared/lib/data/mapper/wallet/balance.dart @@ -1,5 +1,5 @@ import 'package:pshared/data/dto/wallet/balance.dart'; -import 'package:pshared/data/mapper/wallet/money.dart'; +import 'package:pshared/data/mapper/money.dart'; import 'package:pshared/models/wallet/balance.dart'; diff --git a/frontend/pshared/lib/data/mapper/wallet/money.dart b/frontend/pshared/lib/data/mapper/wallet/money.dart deleted file mode 100644 index 72a6f2e8..00000000 --- a/frontend/pshared/lib/data/mapper/wallet/money.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:pshared/data/dto/wallet/money.dart'; -import 'package:pshared/models/wallet/money.dart'; - - -extension MoneyDTOMapper on MoneyDTO { - WalletMoney toDomain() => WalletMoney( - amount: amount, - currency: currency, - ); -} diff --git a/frontend/pshared/lib/data/mapper/wallet/wallet.dart b/frontend/pshared/lib/data/mapper/wallet/wallet.dart index 705ad28a..687e2541 100644 --- a/frontend/pshared/lib/data/mapper/wallet/wallet.dart +++ b/frontend/pshared/lib/data/mapper/wallet/wallet.dart @@ -1,11 +1,12 @@ import 'package:pshared/data/dto/wallet/balance.dart'; import 'package:pshared/data/dto/wallet/wallet.dart'; +import 'package:pshared/data/mapper/money.dart'; import 'package:pshared/data/mapper/wallet/asset.dart'; import 'package:pshared/data/mapper/wallet/balance.dart'; -import 'package:pshared/data/mapper/wallet/money.dart'; import 'package:pshared/models/describable.dart'; import 'package:pshared/models/wallet/wallet.dart'; + extension WalletDTOMapper on WalletDTO { WalletModel toDomain({WalletBalanceDTO? balance}) => WalletModel( walletRef: walletRef, diff --git a/frontend/pshared/lib/models/ledger/account.dart b/frontend/pshared/lib/models/ledger/account.dart new file mode 100644 index 00000000..1486a2a5 --- /dev/null +++ b/frontend/pshared/lib/models/ledger/account.dart @@ -0,0 +1,58 @@ +import 'package:pshared/models/describable.dart'; + + +class LedgerAccount implements Describable { + final String ledgerAccountRef; + final String organizationRef; + final String? ownerRef; + final String accountCode; + final String accountType; + final String currency; + final String status; + final bool allowNegative; + final bool isSettlement; + final Map? metadata; + final DateTime? createdAt; + final DateTime? updatedAt; + final Describable describable; + + @override + String get name => describable.name; + + @override + String? get description => describable.description; + + const LedgerAccount({ + required this.ledgerAccountRef, + required this.organizationRef, + this.ownerRef, + required this.accountCode, + required this.accountType, + required this.currency, + required this.status, + required this.allowNegative, + required this.isSettlement, + this.metadata, + this.createdAt, + this.updatedAt, + required this.describable, + }); + + LedgerAccount copyWith({ + Describable? describable, + }) => LedgerAccount( + ledgerAccountRef: ledgerAccountRef, + organizationRef: organizationRef, + ownerRef: ownerRef, + accountCode: accountCode, + accountType: accountType, + currency: currency, + status: status, + allowNegative: allowNegative, + isSettlement: isSettlement, + metadata: metadata, + createdAt: createdAt, + updatedAt: updatedAt, + describable: describable ?? this.describable, + ); +} diff --git a/frontend/pshared/lib/models/payment/money.dart b/frontend/pshared/lib/models/money.dart similarity index 100% rename from frontend/pshared/lib/models/payment/money.dart rename to frontend/pshared/lib/models/money.dart diff --git a/frontend/pshared/lib/models/payment/fees/line.dart b/frontend/pshared/lib/models/payment/fees/line.dart index bd5b40fc..9c8c22c2 100644 --- a/frontend/pshared/lib/models/payment/fees/line.dart +++ b/frontend/pshared/lib/models/payment/fees/line.dart @@ -1,4 +1,4 @@ -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; class FeeLine { diff --git a/frontend/pshared/lib/models/payment/fees/network.dart b/frontend/pshared/lib/models/payment/fees/network.dart index f9ea24b2..98c77edd 100644 --- a/frontend/pshared/lib/models/payment/fees/network.dart +++ b/frontend/pshared/lib/models/payment/fees/network.dart @@ -1,4 +1,4 @@ -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; class NetworkFee { diff --git a/frontend/pshared/lib/models/payment/fx/quote.dart b/frontend/pshared/lib/models/payment/fx/quote.dart index 91c21ddd..44d356b9 100644 --- a/frontend/pshared/lib/models/payment/fx/quote.dart +++ b/frontend/pshared/lib/models/payment/fx/quote.dart @@ -1,4 +1,4 @@ -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; class FxQuote { diff --git a/frontend/pshared/lib/models/payment/intent.dart b/frontend/pshared/lib/models/payment/intent.dart index 94fd5820..aeef6177 100644 --- a/frontend/pshared/lib/models/payment/intent.dart +++ b/frontend/pshared/lib/models/payment/intent.dart @@ -2,7 +2,7 @@ import 'package:pshared/models/payment/fx/intent.dart'; import 'package:pshared/models/payment/kind.dart'; import 'package:pshared/models/payment/customer.dart'; import 'package:pshared/models/payment/methods/data.dart'; -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; import 'package:pshared/models/payment/settlement_mode.dart'; diff --git a/frontend/pshared/lib/models/payment/quote/aggregate.dart b/frontend/pshared/lib/models/payment/quote/aggregate.dart index 07a006e9..6c236e13 100644 --- a/frontend/pshared/lib/models/payment/quote/aggregate.dart +++ b/frontend/pshared/lib/models/payment/quote/aggregate.dart @@ -1,4 +1,4 @@ -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; class PaymentQuoteAggregate { diff --git a/frontend/pshared/lib/models/payment/quote/quote.dart b/frontend/pshared/lib/models/payment/quote/quote.dart index 757b2381..da8eb73c 100644 --- a/frontend/pshared/lib/models/payment/quote/quote.dart +++ b/frontend/pshared/lib/models/payment/quote/quote.dart @@ -1,6 +1,6 @@ import 'package:pshared/models/payment/fees/line.dart'; import 'package:pshared/models/payment/fx/quote.dart'; -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; import 'package:pshared/models/payment/fees/network.dart'; diff --git a/frontend/pshared/lib/models/wallet/balance.dart b/frontend/pshared/lib/models/wallet/balance.dart index d0f8830a..ffde28b6 100644 --- a/frontend/pshared/lib/models/wallet/balance.dart +++ b/frontend/pshared/lib/models/wallet/balance.dart @@ -1,10 +1,10 @@ -import 'package:pshared/models/wallet/money.dart'; +import 'package:pshared/models/money.dart'; class WalletBalance { - final WalletMoney? available; - final WalletMoney? pendingInbound; - final WalletMoney? pendingOutbound; + final Money? available; + final Money? pendingInbound; + final Money? pendingOutbound; final DateTime? calculatedAt; const WalletBalance({ diff --git a/frontend/pshared/lib/models/wallet/money.dart b/frontend/pshared/lib/models/wallet/money.dart deleted file mode 100644 index 305ec204..00000000 --- a/frontend/pshared/lib/models/wallet/money.dart +++ /dev/null @@ -1,9 +0,0 @@ -class WalletMoney { - final String amount; - final String currency; - - const WalletMoney({ - required this.amount, - required this.currency, - }); -} diff --git a/frontend/pshared/lib/models/wallet/wallet.dart b/frontend/pshared/lib/models/wallet/wallet.dart index 9b1be420..d78c01dc 100644 --- a/frontend/pshared/lib/models/wallet/wallet.dart +++ b/frontend/pshared/lib/models/wallet/wallet.dart @@ -1,7 +1,7 @@ import 'package:pshared/models/describable.dart'; +import 'package:pshared/models/money.dart'; import 'package:pshared/models/wallet/asset.dart'; import 'package:pshared/models/wallet/balance.dart'; -import 'package:pshared/models/wallet/money.dart'; class WalletModel implements Describable { @@ -15,7 +15,7 @@ class WalletModel implements Describable { final DateTime? createdAt; final DateTime? updatedAt; final WalletBalance? balance; - final WalletMoney? availableMoney; + final Money? availableMoney; final Describable describable; @override @@ -40,8 +40,6 @@ class WalletModel implements Describable { }); WalletModel copyWith({ - WalletBalance? balance, - WalletMoney? availableMoney, Describable? describable, }) => WalletModel( walletRef: walletRef, @@ -53,8 +51,8 @@ class WalletModel implements Describable { metadata: metadata, createdAt: createdAt, updatedAt: updatedAt, - balance: balance ?? this.balance, - availableMoney: availableMoney ?? this.availableMoney, + balance: balance, + availableMoney: availableMoney, describable: describable ?? this.describable, ); } diff --git a/frontend/pshared/lib/provider/payment/quotation/intent_builder.dart b/frontend/pshared/lib/provider/payment/quotation/intent_builder.dart index def7d899..94107297 100644 --- a/frontend/pshared/lib/provider/payment/quotation/intent_builder.dart +++ b/frontend/pshared/lib/provider/payment/quotation/intent_builder.dart @@ -7,7 +7,7 @@ import 'package:pshared/models/payment/fx/side.dart'; import 'package:pshared/models/payment/kind.dart'; import 'package:pshared/models/payment/methods/managed_wallet.dart'; import 'package:pshared/models/payment/methods/type.dart'; -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; import 'package:pshared/models/payment/settlement_mode.dart'; import 'package:pshared/models/payment/intent.dart'; import 'package:pshared/models/recipient/recipient.dart'; diff --git a/frontend/pshared/lib/provider/payment/quotation/quotation.dart b/frontend/pshared/lib/provider/payment/quotation/quotation.dart index 3cf4daae..c14985ce 100644 --- a/frontend/pshared/lib/provider/payment/quotation/quotation.dart +++ b/frontend/pshared/lib/provider/payment/quotation/quotation.dart @@ -10,7 +10,7 @@ import 'package:pshared/data/mapper/payment/intent/payment.dart'; import 'package:pshared/models/asset.dart'; import 'package:pshared/models/payment/intent.dart'; import 'package:pshared/models/payment/quote/quote.dart'; -import 'package:pshared/models/payment/money.dart'; +import 'package:pshared/models/money.dart'; import 'package:pshared/provider/organizations.dart'; import 'package:pshared/provider/payment/amount.dart'; import 'package:pshared/provider/payment/flow.dart'; diff --git a/frontend/pshared/lib/service/ledger.dart b/frontend/pshared/lib/service/ledger.dart new file mode 100644 index 00000000..3de575d3 --- /dev/null +++ b/frontend/pshared/lib/service/ledger.dart @@ -0,0 +1,31 @@ +import 'package:pshared/api/responses/wallet_balance.dart'; +import 'package:pshared/api/responses/wallets.dart'; +import 'package:pshared/data/mapper/wallet/response.dart'; +import 'package:pshared/models/wallet/balance.dart'; +import 'package:pshared/models/wallet/wallet.dart'; +import 'package:pshared/service/authorization/service.dart'; +import 'package:pshared/service/services.dart'; + + +class LedgerService { + static const String _objectType = Services.ledger; + + static Future> list(String organizationRef) async { + final json = await AuthorizationService.getGETResponse( + _objectType, + '/$organizationRef', + ); + return WalletsResponse.fromJson(json).toDomain(); + } + + static Future getBalance({ + required String organizationRef, + required String walletRef, + }) async { + final json = await AuthorizationService.getGETResponse( + _objectType, + '/$organizationRef/$walletRef/balance', + ); + return WalletBalanceResponse.fromJson(json).toDomain(); + } +} diff --git a/frontend/pshared/lib/service/services.dart b/frontend/pshared/lib/service/services.dart index b23f4ae2..c2b2be3e 100644 --- a/frontend/pshared/lib/service/services.dart +++ b/frontend/pshared/lib/service/services.dart @@ -8,6 +8,7 @@ class Services { static const String permission = 'permissions'; static const String storage = 'storage'; static const String chainWallets = 'chain_wallets'; + static const String ledger = 'ledger_accounts'; static const String recipients = 'recipients'; static const String paymentMethods = 'payment_methods';