// KeyValueStorePersistenceAdapter.cs
using System.Threading;
using Convai.Domain.Abstractions;
using Convai.Runtime.Core.Async;
using Convai.Runtime.Core.Providers;
public class KeyValueStorePersistenceAdapter : IPersistenceProvider
{
private readonly IKeyValueStore _store;
public KeyValueStorePersistenceAdapter(IKeyValueStore store) => _store = store;
public string GetString(string key, string defaultValue = null)
=> _store.GetString(key, defaultValue);
public int GetInt(string key, int defaultValue = 0)
{
string raw = _store.GetString(key);
return raw != null && int.TryParse(raw, out int v) ? v : defaultValue;
}
public float GetFloat(string key, float defaultValue = 0f)
{
string raw = _store.GetString(key);
return raw != null && float.TryParse(raw, out float v) ? v : defaultValue;
}
public bool GetBool(string key, bool defaultValue = false)
{
string raw = _store.GetString(key);
return raw != null && bool.TryParse(raw, out bool v) ? v : defaultValue;
}
public bool HasKey(string key) => _store.HasKey(key);
public PersistenceResult SetString(string key, string value, PersistenceOptions options = default)
{ _store.SetString(key, value); return PersistenceResult.Succeeded(); }
public PersistenceResult SetInt(string key, int value, PersistenceOptions options = default)
{ _store.SetString(key, value.ToString()); return PersistenceResult.Succeeded(); }
public PersistenceResult SetFloat(string key, float value, PersistenceOptions options = default)
{ _store.SetString(key, value.ToString("G")); return PersistenceResult.Succeeded(); }
public PersistenceResult SetBool(string key, bool value, PersistenceOptions options = default)
{ _store.SetString(key, value.ToString()); return PersistenceResult.Succeeded(); }
public PersistenceResult Delete(string key)
{ _store.DeleteKey(key); return PersistenceResult.Succeeded(); }
public PersistenceResult DeleteAll(string prefix)
=> PersistenceResult.Failed("此后端不支持 DeleteAll。");
public void Save() => _store.Save();
// 异步存根——同步后端返回即时结果。
public IConvaiOperation<PersistenceResult> SyncAsync(CancellationToken ct = default)
=> ConvaiOperation.Succeeded(PersistenceResult.Succeeded());
public IConvaiOperation<PersistenceResult> SaveVersionedAsync<T>(VersionedKey key, T value,
ConflictResolutionStrategy strategy = ConflictResolutionStrategy.LastWriteWins,
CancellationToken ct = default)
=> ConvaiOperation.Succeeded(PersistenceResult.Failed("此后端不支持版本化操作。"));
public IConvaiOperation<VersionedValue<T>> LoadVersionedAsync<T>(string ns, string key, CancellationToken ct = default)
=> ConvaiOperation.Succeeded(VersionedValue<T>.NotFound);
public IConvaiOperation<PersistenceResult> MigrateAsync(int fromVersion, int toVersion, CancellationToken ct = default)
=> ConvaiOperation.Succeeded(PersistenceResult.Succeeded());
}