49 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|