initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../../core/api/api_client.dart';
|
||||
import '../../../core/api/api_endpoints.dart';
|
||||
import '../domain/establishment.dart';
|
||||
|
||||
/// Dépôt de données pour les établissements et machines.
|
||||
class EstablishmentRepository {
|
||||
EstablishmentRepository(this._apiClient);
|
||||
|
||||
final ApiClient _apiClient;
|
||||
|
||||
Future<List<Establishment>> fetchEstablishments() async {
|
||||
final response = await _apiClient.get(ApiEndpoints.establishments);
|
||||
final data = _extractList(response.data);
|
||||
|
||||
return data
|
||||
.map((json) => Establishment.fromJson(json as Map<String, dynamic>))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future<Establishment> fetchEstablishment(String uuid) async {
|
||||
final response = await _apiClient.get(ApiEndpoints.establishment(uuid));
|
||||
final json = _extractObject(response.data);
|
||||
return Establishment.fromJson(json);
|
||||
}
|
||||
|
||||
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 establishmentRepositoryProvider = Provider<EstablishmentRepository>((ref) {
|
||||
return EstablishmentRepository(ref.watch(apiClientProvider));
|
||||
});
|
||||
|
||||
final establishmentsProvider = FutureProvider<List<Establishment>>((ref) async {
|
||||
return ref.watch(establishmentRepositoryProvider).fetchEstablishments();
|
||||
});
|
||||
|
||||
final establishmentDetailProvider =
|
||||
FutureProvider.family<Establishment, String>((ref, uuid) async {
|
||||
return ref.watch(establishmentRepositoryProvider).fetchEstablishment(uuid);
|
||||
});
|
||||
Reference in New Issue
Block a user