// ignore_for_file: non_constant_identifier_names import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:logging/logging.dart'; import 'package:moneymgr_mobile/services/storage/prefs.dart'; import 'api_client.dart'; part 'server_api.freezed.dart'; part 'server_api.g.dart'; @freezed abstract class ServerConstraint with _$ServerConstraint { const factory ServerConstraint({required int min, required int max}) = _ServerConstraint; factory ServerConstraint.fromJson(Map json) => _$ServerConstraintFromJson(json); } @freezed abstract class ServerConstraints with _$ServerConstraints { const factory ServerConstraints({required ServerConstraint inbox_entry_label}) = _ServerConstraints; factory ServerConstraints.fromJson(Map json) => _$ServerConstraintsFromJson(json); } @freezed abstract class ServerConfig with _$ServerConfig { const factory ServerConfig({required ServerConstraints constraints}) = _ServerConfig; factory ServerConfig.fromJson(Map json) => _$ServerConfigFromJson(json); } /// Auth API extension ServerApi on ApiClient { /// Get server configuration Future serverConfig() async { final response = await execute("/server/config", method: "GET"); return ServerConfig.fromJson(response.data); } /// Get server configuration, or retrieve cached information (if available, in /// case of failure) Future serverConfigOrCache() async { try { final config = await serverConfig(); this.prefs.setServerConfig(config); return config; } catch (e, s) { Logger.root.warning("Failed to fetch server configuration! $e $s"); } final cached = this.prefs.serverConfig(); if (cached == null) { throw Exception( "Could not fetch server configuration, cached version is unavailable!", ); } return cached; } }