refactor: split providers into feature modules
This commit is contained in:
52
lib/features/api_keys/providers/api_keys_providers.dart
Normal file
52
lib/features/api_keys/providers/api_keys_providers.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../../app/error_message.dart';
|
||||
import '../../../app/load_state.dart';
|
||||
import '../../../models/api_key_info.dart';
|
||||
import '../../shared/providers/core_providers.dart';
|
||||
|
||||
final apiKeysProvider =
|
||||
NotifierProvider<ApiKeysNotifier, LoadState<List<ApiKeyInfo>>>(
|
||||
() => ApiKeysNotifier(),
|
||||
);
|
||||
|
||||
class ApiKeysNotifier extends Notifier<LoadState<List<ApiKeyInfo>>> {
|
||||
@override
|
||||
LoadState<List<ApiKeyInfo>> build() => const LoadState.idle(<ApiKeyInfo>[]);
|
||||
|
||||
Future<void> load() async {
|
||||
state = LoadState.loading(state.data);
|
||||
try {
|
||||
final api = ref.read(apiProvider);
|
||||
final res = await api.getApiKeys();
|
||||
final keys = ApiKeyInfo.listFromApi(res.data);
|
||||
|
||||
state = keys.isEmpty ? LoadState.empty(keys) : LoadState.data(keys);
|
||||
} catch (e) {
|
||||
state = LoadState.error(state.data, describeLoadError(e));
|
||||
}
|
||||
}
|
||||
|
||||
Future<String> create(String name, {bool isAdmin = false}) async {
|
||||
final api = ref.read(apiProvider);
|
||||
final res = await api.createApiKey(name, isAdmin: isAdmin);
|
||||
await load();
|
||||
if (res.data is Map) {
|
||||
final key = res.data['key']?.toString();
|
||||
if (key != null && key.isNotEmpty) {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
throw const FormatException('backend не вернул созданный API key');
|
||||
}
|
||||
|
||||
Future<void> revoke(String key) async {
|
||||
await ref.read(apiProvider).revokeApiKey(key);
|
||||
await load();
|
||||
}
|
||||
|
||||
Future<void> activate(String key) async {
|
||||
await ref.read(apiProvider).activateApiKey(key);
|
||||
await load();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user