ledger account service basis

This commit is contained in:
Stephan D
2026-01-22 01:00:55 +01:00
parent 62ff96b90e
commit 8e46bc6061
22 changed files with 118 additions and 65 deletions

View File

@@ -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';

View File

@@ -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<String, dynamic> json) => _$MoneyDTOFromJson(json);
Map<String, dynamic> toJson() => _$MoneyDTOToJson(this);
}

View File

@@ -1,5 +1,6 @@
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(

View File

@@ -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';

View File

@@ -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,
);
}

View File

@@ -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,

View File

@@ -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<String, String>? 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,
);
}

View File

@@ -1,4 +1,4 @@
import 'package:pshared/models/payment/money.dart';
import 'package:pshared/models/money.dart';
class FeeLine {

View File

@@ -1,4 +1,4 @@
import 'package:pshared/models/payment/money.dart';
import 'package:pshared/models/money.dart';
class NetworkFee {

View File

@@ -1,4 +1,4 @@
import 'package:pshared/models/payment/money.dart';
import 'package:pshared/models/money.dart';
class FxQuote {

View File

@@ -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';

View File

@@ -1,4 +1,4 @@
import 'package:pshared/models/payment/money.dart';
import 'package:pshared/models/money.dart';
class PaymentQuoteAggregate {

View File

@@ -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';

View File

@@ -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({

View File

@@ -1,9 +0,0 @@
class WalletMoney {
final String amount;
final String currency;
const WalletMoney({
required this.amount,
required this.currency,
});
}

View File

@@ -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,
);
}

View File

@@ -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';

View File

@@ -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';

View File

@@ -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<WalletModel>> list(String organizationRef) async {
final json = await AuthorizationService.getGETResponse(
_objectType,
'/$organizationRef',
);
return WalletsResponse.fromJson(json).toDomain();
}
static Future<WalletBalance> getBalance({
required String organizationRef,
required String walletRef,
}) async {
final json = await AuthorizationService.getGETResponse(
_objectType,
'/$organizationRef/$walletRef/balance',
);
return WalletBalanceResponse.fromJson(json).toDomain();
}
}

View File

@@ -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';