RuStore Remote Config

This commit is contained in:
2024-12-22 16:39:43 +03:00
parent 86e539daf1
commit 0cda6f9a48
27 changed files with 693 additions and 380 deletions

View File

@@ -0,0 +1,5 @@
import 'package:flutter_rustore_remoteconfig/rustore_remote_config.dart';
class ReverseNNRemoteConfigParameters extends StaticParameters {
}

View File

@@ -0,0 +1,131 @@
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter_rustore_remoteconfig/flutter_rustore_remoteconfig.dart';
import 'package:flutter_rustore_remoteconfig/rustore_remote_config.dart';
import 'package:reverse_nn/application/dto/rule.dart';
import 'package:reverse_nn/application/dto/schedule.dart';
import 'package:reverse_nn/configuration.dart';
import 'package:reverse_nn/application/services/remote_config/parameters.dart';
class ReverseNNRuStoreRemoteConfig {
void create() {
FlutterRustoreRemoteconfig.create(
Configuration.ruStoreRemoteConfigAppID,
PluginUpdateBehavior.defaultBehavior,
15,
ReverseNNRemoteConfigParameters(),
onInitComplete: () {
if(kDebugMode) { log('RuStore Remote Config - onInitComplete'); }
},
onFirstLoadComplete: () {
if(kDebugMode) { log('RuStore Remote Config - onFirstLoadComplete'); }
},
onMemoryCacheUpdated: () {
if(kDebugMode) { log('RuStore Remote Config - onMemoryCacheUpdated'); }
}
);
}
Future<DateTime> getStartScheduleDate() async {
try {
FlutterRustoreRemoteconfig.init();
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
final startScheduleDate = remoteConfig.getString('startScheduleDate');
return startScheduleDate != null
? DateTime.parse(startScheduleDate)
: DateTime(2024, 8, 1);
}
catch (error) {
if(kDebugMode) {
log('ReverseNNRuStoreRemoteConfig.getStartScheduleDate - error - ${error.toString()}');
}
return DateTime(2024, 8, 1);
}
}
Future<DateTime> getEndScheduleDate() async {
try {
FlutterRustoreRemoteconfig.init();
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
final endScheduleDate = remoteConfig.getString('endScheduleDate');
return endScheduleDate != null
? DateTime.parse(endScheduleDate)
: DateTime(2025, 12, 31, 23, 59, 59, 999, 999);
}
catch (error) {
if(kDebugMode) {
log('ReverseNNRuStoreRemoteConfig.getEndScheduleDate - error - ${error.toString()}');
}
return DateTime(2025, 12, 31, 23, 59, 59, 999, 999);
}
}
Future<List<Rule>?> getRules() async {
try {
FlutterRustoreRemoteconfig.init();
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
final rules = remoteConfig.getString('scheduleRules');
return rules != null
? (jsonDecode(rules) as List<dynamic>).map((el) => Rule.fromJson(el)).toList()
: await _getRulesFromStorage();
}
catch(error) {
if(kDebugMode) {
log('ReverseNNRuStoreRemoteConfig.getRules - error - ${error.toString()}');
}
return await _getRulesFromStorage();
}
}
Future<List<Rule>?> _getRulesFromStorage() async {
final Map<String, dynamic>? schema = await _getSchemaFromStorage();
if(schema == null || !schema.containsKey('rules')) return null;
return (schema['rules'] as List<dynamic>)
.map((el) => Rule.fromJson(el))
.toList();
}
Future<List<ScheduleItem>?> getScheduleByKey(String key) async {
try {
FlutterRustoreRemoteconfig.init();
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
final schedule = remoteConfig.getString('schedules-$key');
return schedule != null
? (jsonDecode(schedule) as List<dynamic>)
.map((el) => ScheduleItem.fromJson(el))
.toList()
: await _getScheduleByKeyFromStorage(key);
}
catch(error) {
if(kDebugMode) {
log('ReverseNNRuStoreRemoteConfig.getScheduleByKey($key) - error - ${error.toString()}');
}
return await _getScheduleByKeyFromStorage(key);
}
}
Future<List<ScheduleItem>?> _getScheduleByKeyFromStorage(String key) async {
final Map<String, dynamic>? schema = await _getSchemaFromStorage();
if(
schema == null
|| !schema.containsKey('schedules')
|| !(schema['schedules'] as Map<String, dynamic>).containsKey(key)
) return null;
return (schema['schedules'][key] as List<dynamic>)
.map((el) => ScheduleItem.fromJson(el))
.toList();
}
Future<Map<String, dynamic>?> _getSchemaFromStorage() async {
return jsonDecode(await rootBundle.loadString('assets/schedule.json'));
}
}