diff --git a/lib/models/file_pool.dart b/lib/models/file_pool.dart new file mode 100644 index 00000000..1f65c862 --- /dev/null +++ b/lib/models/file_pool.dart @@ -0,0 +1,36 @@ +class FilePool { + final String id; + final String name; + final String? description; + final Map storageConfig; + final Map billingConfig; + final Map policyConfig; + final bool isHidden; + + FilePool({ + required this.id, + required this.name, + this.description, + required this.storageConfig, + required this.billingConfig, + required this.policyConfig, + required this.isHidden, + }); + + factory FilePool.fromJson(Map json) { + return FilePool( + id: json['id'] as String, + name: json['name'] as String, + description: json['description'] as String?, + storageConfig: json['storage_config'] as Map, + billingConfig: json['billing_config'] as Map, + policyConfig: json['policy_config'] as Map, + isHidden: json['is_hidden'] as bool, + ); + } + + static List listFromResponse(dynamic data) { + final parsed = data as List; + return parsed.map((e) => FilePool.fromJson(e)).toList(); + } +} diff --git a/lib/pods/pool_provider.dart b/lib/pods/pool_provider.dart new file mode 100644 index 00000000..95ce2dc6 --- /dev/null +++ b/lib/pods/pool_provider.dart @@ -0,0 +1,14 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../services/pool_service.dart'; +import '../models/file_pool.dart'; +import 'package:island/pods/network.dart'; + +final poolServiceProvider = Provider((ref) { + final dio = ref.watch(apiClientProvider); + return PoolService(dio); +}); + +final poolsProvider = FutureProvider>((ref) async { + final service = ref.watch(poolServiceProvider); + return service.fetchPools(); +}); diff --git a/lib/services/pool_service.dart b/lib/services/pool_service.dart new file mode 100644 index 00000000..bbd120a2 --- /dev/null +++ b/lib/services/pool_service.dart @@ -0,0 +1,19 @@ +import 'package:dio/dio.dart'; + +import 'package:island/models/file_pool.dart'; + +class PoolService { + final Dio _dio; + + PoolService(this._dio); + + Future> fetchPools() async { + final response = await _dio.get('/drive/pools'); + + if (response.statusCode == 200) { + return FilePool.listFromResponse(response.data); + } else { + throw Exception('Failed to fetch pools: ${response.statusCode}'); + } + } +}