void.cat/VoidCat/Services/Paywall/PaywallStore.cs

45 lines
1.2 KiB
C#
Raw Normal View History

2022-02-21 22:35:06 +00:00
using VoidCat.Model.Paywall;
using VoidCat.Services.Abstractions;
namespace VoidCat.Services.Paywall;
public class PaywallStore : IPaywallStore
{
private readonly ICache _cache;
public PaywallStore(ICache database)
{
_cache = database;
}
public async ValueTask<PaywallConfig?> GetConfig(Guid id)
{
2022-02-22 14:20:31 +00:00
var cfg = await _cache.Get<NoPaywallConfig>(ConfigKey(id));
2022-02-21 22:35:06 +00:00
return cfg?.Service switch
{
2022-02-22 14:20:31 +00:00
PaywallServices.None => cfg,
2022-02-21 22:35:06 +00:00
PaywallServices.Strike => await _cache.Get<StrikePaywallConfig>(ConfigKey(id)),
_ => default
};
}
public async ValueTask SetConfig(Guid id, PaywallConfig config)
{
await _cache.Set(ConfigKey(id), config);
}
public async ValueTask<PaywallOrder?> GetOrder(Guid id)
{
return await _cache.Get<PaywallOrder>(OrderKey(id));
}
public async ValueTask SaveOrder(PaywallOrder order)
{
await _cache.Set(OrderKey(order.Id), order,
order.Status == PaywallOrderStatus.Paid ? TimeSpan.FromDays(1) : TimeSpan.FromSeconds(5));
}
private string ConfigKey(Guid id) => $"paywall:config:{id}";
private string OrderKey(Guid id) => $"paywall:order:{id}";
}