From da090627ffbfb033153aa3100fa99a09eb932742 Mon Sep 17 00:00:00 2001 From: Rikitav Date: Mon, 9 Mar 2026 03:49:03 +0400 Subject: [PATCH] * Added Redis state storage implementation --- Telegrator.slnx | 1 + src/Telegartor.RedisStateStorage/README.md | 0 .../States/RedisStateStorage.cs | 35 +++++++++++++++ .../Telegartor.RedisStateStorage.csproj | 43 +++++++++++++++++++ src/Telegrator/Telegrator.csproj | 2 +- 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/Telegartor.RedisStateStorage/README.md create mode 100644 src/Telegartor.RedisStateStorage/States/RedisStateStorage.cs create mode 100644 src/Telegartor.RedisStateStorage/Telegartor.RedisStateStorage.csproj diff --git a/Telegrator.slnx b/Telegrator.slnx index 8f71ba5..4e2b0ed 100644 --- a/Telegrator.slnx +++ b/Telegrator.slnx @@ -1,5 +1,6 @@ + diff --git a/src/Telegartor.RedisStateStorage/README.md b/src/Telegartor.RedisStateStorage/README.md new file mode 100644 index 0000000..e69de29 diff --git a/src/Telegartor.RedisStateStorage/States/RedisStateStorage.cs b/src/Telegartor.RedisStateStorage/States/RedisStateStorage.cs new file mode 100644 index 0000000..ce4dac4 --- /dev/null +++ b/src/Telegartor.RedisStateStorage/States/RedisStateStorage.cs @@ -0,0 +1,35 @@ +using StackExchange.Redis; +using System.Text.Json; +using Telegrator.Core.States; + +namespace Telegrator.States; + +public class RedisStateStorage(IConnectionMultiplexer redis) : IStateStorage +{ + private readonly IDatabase _db = redis.GetDatabase(); + + /// + public async Task SetAsync(string key, T state, CancellationToken cancellationToken) + { + string json = JsonSerializer.Serialize(state); + await _db.StringSetAsync(key, json); + } + + /// + public async Task GetAsync(string key, CancellationToken cancellationToken) where T : default + { + RedisValue json = await _db.StringGetAsync(key); + string? jsonStr = json; + + if (jsonStr is null) + return default; + + return JsonSerializer.Deserialize(json: jsonStr); + } + + /// + public async Task DeleteAsync(string key, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Telegartor.RedisStateStorage/Telegartor.RedisStateStorage.csproj b/src/Telegartor.RedisStateStorage/Telegartor.RedisStateStorage.csproj new file mode 100644 index 0000000..bdf4782 --- /dev/null +++ b/src/Telegartor.RedisStateStorage/Telegartor.RedisStateStorage.csproj @@ -0,0 +1,43 @@ + + + + netstandard2.1 + enable + enable + latest + Telegrator + ..\..\bin + ..\..\docs\$(AssemblyName).xml + + True + True + True + True + + Telegrator.RedisStateStorage + 1.16.4 + Rikitav Tim4ik + Rikitav Tim4ik + https://github.com/Rikitav/Telegrator + telegram;bot;mediator;attributes;aspect;hosting;host;framework;easy;simple;handlers + + telegrator_nuget.png + README.md + LICENSE + + + + + + + + + + + + + + + + + diff --git a/src/Telegrator/Telegrator.csproj b/src/Telegrator/Telegrator.csproj index 9ad50dc..21ecf6a 100644 --- a/src/Telegrator/Telegrator.csproj +++ b/src/Telegrator/Telegrator.csproj @@ -1,7 +1,7 @@  - netstandard2.0 + netstandard2.1 enable enable latest