33 lines
1.0 KiB
C#
33 lines
1.0 KiB
C#
using System.Text.Json;
|
|
using OED.Api.Core.Interfaces.Services;
|
|
using OED.Api.Core.Models.Eve;
|
|
using StackExchange.Redis;
|
|
|
|
namespace OED.Api.Infrastructure.Auth;
|
|
|
|
public class SessionService(IConnectionMultiplexer redis) : ISessionService
|
|
{
|
|
private readonly IDatabase _db = redis.GetDatabase();
|
|
private static readonly TimeSpan SessionTtl = TimeSpan.FromDays(7);
|
|
|
|
public async Task<string> CreateAsync(EveSession session)
|
|
{
|
|
var sessionId = Guid.NewGuid().ToString("N");
|
|
var json = JsonSerializer.Serialize(session);
|
|
await _db.StringSetAsync($"session:{sessionId}", json, SessionTtl);
|
|
return sessionId;
|
|
}
|
|
|
|
public async Task<EveSession?> GetAsync(string sessionId)
|
|
{
|
|
var json = await _db.StringGetAsync($"session:{sessionId}");
|
|
if (json.IsNullOrEmpty) return null;
|
|
return JsonSerializer.Deserialize<EveSession>((string)json!);
|
|
}
|
|
|
|
public async Task DeleteAsync(string sessionId)
|
|
{
|
|
await _db.KeyDeleteAsync($"session:{sessionId}");
|
|
}
|
|
}
|