Integration fonctionnalités V1 ( resas + gestion machines

This commit is contained in:
bastien
2026-07-03 19:02:48 +02:00
parent 20f383dd62
commit bf191d6396
46 changed files with 4691 additions and 654 deletions
+14 -20
View File
@@ -2,6 +2,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../core/api/api_client.dart';
import '../../../core/api/api_endpoints.dart';
import '../../../core/api/api_response.dart';
import '../../../core/auth/auth_provider.dart';
import '../domain/wallet.dart';
/// Dépôt de données pour le portefeuille électronique.
@@ -12,36 +14,18 @@ class WalletRepository {
Future<Wallet> fetchWallet() async {
final response = await _apiClient.get(ApiEndpoints.wallet);
final json = _extractObject(response.data);
final json = ApiResponse.object(response.data, 'wallet');
return Wallet.fromJson(json);
}
Future<List<WalletTransaction>> fetchTransactions() async {
final response = await _apiClient.get(ApiEndpoints.walletTransactions);
final list = _extractList(response.data);
final list = ApiResponse.list(response.data, 'transactions');
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) {
@@ -49,10 +33,20 @@ final walletRepositoryProvider = Provider<WalletRepository>((ref) {
});
final walletProvider = FutureProvider<Wallet>((ref) async {
final token = ref.watch(authProvider.select((state) => state.accessToken));
if (token == null || token.isEmpty) {
throw StateError('Non authentifié');
}
return ref.watch(walletRepositoryProvider).fetchWallet();
});
final walletTransactionsProvider =
FutureProvider<List<WalletTransaction>>((ref) async {
final token = ref.watch(authProvider.select((state) => state.accessToken));
if (token == null || token.isEmpty) {
throw StateError('Non authentifié');
}
return ref.watch(walletRepositoryProvider).fetchTransactions();
});