Files
qhmes/yy-admin-master/YY.Admin/Infrastructure/Storage/TokenStore.cs

49 lines
1.8 KiB
C#

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<string> 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;
}
}