refactor(apps): 重构数据层目录结构并新增启动预热编排器

This commit is contained in:
zl-q
2026-03-29 20:26:30 +08:00
parent 33340de8f9
commit 4db9a13bfe
108 changed files with 1653 additions and 1320 deletions
+31 -6
View File
@@ -1,20 +1,29 @@
import 'dart:async';
import 'cache_entry.dart';
import 'cache_policy.dart';
import 'hybrid_cache_store.dart';
import 'cache_store.dart';
abstract class CachedRepository<T> {
final HybridCacheStore store;
final CachePolicy policy;
final DateTime Function() now;
final Object? Function(T value) encodeValue;
final T Function(Object? raw) decodeValue;
final Map<String, Future<void>> _refreshInFlight = <String, Future<void>>{};
CachedRepository({
required this.store,
required this.policy,
DateTime Function()? now,
}) : now = now ?? DateTime.now;
Object? Function(T value)? encodeValue,
T Function(Object? raw)? decodeValue,
}) : now = now ?? DateTime.now,
encodeValue = encodeValue ?? _defaultEncode,
decodeValue = decodeValue ?? _defaultDecode;
static Object? _defaultEncode<T>(T value) => value;
static T _defaultDecode<T>(Object? raw) => raw as T;
Future<T> getOrLoad({
required String key,
@@ -58,16 +67,32 @@ abstract class CachedRepository<T> {
}
Future<CacheEntry<T>?> readCacheEntry(String key) {
return store.read<CacheEntry<T>>(key);
return _readDecodedEntry(key);
}
Future<void> writeCacheEntry(String key, T value) {
return store.write<CacheEntry<T>>(
return store.write<CacheEntry<Object?>>(
key,
CacheEntry<T>(value: value, fetchedAt: now()),
CacheEntry<Object?>(value: encodeValue(value), fetchedAt: now()),
);
}
Future<CacheEntry<T>?> _readDecodedEntry(String key) async {
final entry = await store.read<CacheEntry<Object?>>(key);
if (entry == null) {
return null;
}
try {
return CacheEntry<T>(
value: decodeValue(entry.value),
fetchedAt: entry.fetchedAt,
);
} catch (_) {
await store.remove(key);
return null;
}
}
Future<void> removeCacheKey(String key) {
return store.remove(key);
}