using SqlSugar; namespace YY.Admin.Infrastructure.Storage; public class TokenStore { private const string TokenKey = "DeviceToken"; private readonly ISqlSugarClient _db; public TokenStore(ISqlSugarClient db) { _db = db; } public async Task UpdateTokenAsync(string token, CancellationToken cancellationToken = default) { var value = token ?? string.Empty; await EnsureTableAsync(cancellationToken).ConfigureAwait(false); var sql = "INSERT INTO app_config(config_key,config_value,updated_at) VALUES(@key,@val,@ts) " + "ON CONFLICT(config_key) DO UPDATE SET config_value=@val, updated_at=@ts;"; var now = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); await _db.Ado.ExecuteCommandAsync(sql, new[] { new SugarParameter("@key", TokenKey), new SugarParameter("@val", value), new SugarParameter("@ts", now) }).ConfigureAwait(false); _ = cancellationToken; } public async Task GetTokenAsync(CancellationToken cancellationToken = default) { await EnsureTableAsync(cancellationToken).ConfigureAwait(false); var sql = "SELECT config_value FROM app_config WHERE config_key=@key LIMIT 1;"; var token = await _db.Ado.GetStringAsync(sql, new[] { new SugarParameter("@key", TokenKey) }).ConfigureAwait(false); return token ?? string.Empty; } private async Task EnsureTableAsync(CancellationToken cancellationToken) { const string sql = "CREATE TABLE IF NOT EXISTS app_config(" + "config_key TEXT PRIMARY KEY," + "config_value TEXT NULL," + "updated_at TEXT NULL);"; await _db.Ado.ExecuteCommandAsync(sql).ConfigureAwait(false); _ = cancellationToken; } }