Files
Finlytic/FinlyticApp/lib/features/admin/repositories/admin_repository.dart
T

64 lines
2.3 KiB
Dart

import 'package:finlytic_app/core/network/api_client.dart';
import 'package:finlytic_app/features/admin/models/admin_user_model.dart';
import 'package:finlytic_app/features/admin/models/admin_create_user_request_dto.dart';
import 'package:finlytic_app/features/admin/models/admin_update_user_request_dto.dart';
import 'package:finlytic_app/features/admin/models/service_setting_dto.dart';
class AdminRepository {
final ApiClient apiClient;
const AdminRepository({required this.apiClient});
Future<List<AdminUserModel>> fetchUsers() async {
try {
final res = await apiClient.get('/api/v1/admin/users');
if (res.statusCode == 200 && res.data != null) {
final List<dynamic> data = res.data;
return data.map((json) => AdminUserModel.fromJson(json)).toList();
}
return [];
} catch (e) {
throw Exception('Nutzer konnten nicht geladen werden: $e');
}
}
Future<void> createUser(AdminCreateUserRequestDto dto) async {
final res = await apiClient.post('/api/v1/admin/users', data: dto.toJson());
if (res.statusCode != 200 && res.statusCode != 201) {
throw Exception('Erstellen fehlgeschlagen');
}
}
Future<void> updateUser(String id, AdminUpdateUserRequestDto dto) async {
final res = await apiClient.put('/api/v1/admin/users/$id', data: dto.toJson());
if (res.statusCode != 200) {
throw Exception('Aktualisieren fehlgeschlagen');
}
}
Future<Map<String, List<ServiceSettingDto>>> fetchSettings() async {
final res = await apiClient.get('/api/v1/admin/settings');
if (res.statusCode == 200 && res.data != null && res.data is Map<String, dynamic>) {
final map = res.data as Map<String, dynamic>;
final result = <String, List<ServiceSettingDto>>{};
map.forEach((k, v) {
if (v is List) {
result[k] = v
.whereType<Map<String, dynamic>>()
.map((item) => ServiceSettingDto.fromJson(item))
.toList();
}
});
return result;
}
return {};
}
Future<void> updateServiceSettings(String serviceName, Map<String, dynamic> settings) async {
final res = await apiClient.put('/api/v1/admin/settings/$serviceName', data: settings);
if (res.statusCode != 200 && res.statusCode != 204) {
throw Exception('Einstellungen konnten nicht gespeichert werden');
}
}
}