59 lines
1.7 KiB
Dart
59 lines
1.7 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../../../core/api/api_client.dart';
|
|
import '../../../core/api/api_endpoints.dart';
|
|
import '../domain/wallet.dart';
|
|
|
|
/// Dépôt de données pour le portefeuille électronique.
|
|
class WalletRepository {
|
|
WalletRepository(this._apiClient);
|
|
|
|
final ApiClient _apiClient;
|
|
|
|
Future<Wallet> fetchWallet() async {
|
|
final response = await _apiClient.get(ApiEndpoints.wallet);
|
|
final json = _extractObject(response.data);
|
|
return Wallet.fromJson(json);
|
|
}
|
|
|
|
Future<List<WalletTransaction>> fetchTransactions() async {
|
|
final response = await _apiClient.get(ApiEndpoints.walletTransactions);
|
|
final list = _extractList(response.data);
|
|
|
|
return list
|
|
.map((json) => WalletTransaction.fromJson(json as Map<String, dynamic>))
|
|
.toList();
|
|
}
|
|
|
|
List<dynamic> _extractList(dynamic data) {
|
|
if (data is List<dynamic>) return data;
|
|
if (data is Map<String, dynamic> && data['data'] is List<dynamic>) {
|
|
return data['data'] as List<dynamic>;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
Map<String, dynamic> _extractObject(dynamic data) {
|
|
if (data is Map<String, dynamic>) {
|
|
if (data['data'] is Map<String, dynamic>) {
|
|
return data['data'] as Map<String, dynamic>;
|
|
}
|
|
return data;
|
|
}
|
|
throw StateError('Réponse API inattendue');
|
|
}
|
|
}
|
|
|
|
final walletRepositoryProvider = Provider<WalletRepository>((ref) {
|
|
return WalletRepository(ref.watch(apiClientProvider));
|
|
});
|
|
|
|
final walletProvider = FutureProvider<Wallet>((ref) async {
|
|
return ref.watch(walletRepositoryProvider).fetchWallet();
|
|
});
|
|
|
|
final walletTransactionsProvider =
|
|
FutureProvider<List<WalletTransaction>>((ref) async {
|
|
return ref.watch(walletRepositoryProvider).fetchTransactions();
|
|
});
|