Files
podnoms/server/Services/Push/Data/SqlitePushSubscriptionStore.cs

44 lines
1.8 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using Lib.Net.Http.WebPush;
using Microsoft.EntityFrameworkCore;
using PodNoms.Api.Services.Push;
using PodNoms.Api.Services.Push.Data;
namespace PodNoms.Api.Services.Push.Data {
internal class SqlitePushSubscriptionStore : IPushSubscriptionStore {
private readonly PushSubscriptionContext _context;
public SqlitePushSubscriptionStore(PushSubscriptionContext context) {
_context = context;
}
public Task StoreSubscriptionAsync(PushSubscription subscription) {
PushSubscriptionContext.PushSubscription entity = new PushSubscriptionContext.PushSubscription(subscription);
if (_context.Subscriptions.Where(s => s.Endpoint == subscription.Endpoint).Count() > 0) {
// _context.Entry(entry).State = EntityState.Modified
_context.Subscriptions.Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
} else {
_context.Subscriptions.Add(entity);
}
return _context.SaveChangesAsync();
}
public async Task DiscardSubscriptionAsync(string endpoint) {
PushSubscriptionContext.PushSubscription subscription = await _context.Subscriptions.FindAsync(endpoint);
_context.Subscriptions.Remove(subscription);
await _context.SaveChangesAsync();
}
public Task ForEachSubscriptionAsync(string uid, Action<PushSubscription> action) {
return _context.Subscriptions.Where(e => e.Auth == uid).AsNoTracking().ForEachAsync(action);
}
public Task ForEachSubscriptionAsync(Action<PushSubscription> action) {
return _context.Subscriptions.AsNoTracking().ForEachAsync(action);
}
}
}