using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; namespace HrynCo.NotificationService.DAL.EF.Core; internal abstract class NotificationEfRepository where TEntity : class { protected NotificationDbContext DbContext { get; } protected DbSet DbSet { get; } protected NotificationEfRepository(NotificationDbContext dbContext) { DbContext = dbContext; DbSet = dbContext.Set(); } protected async Task AddAsync(TEntity entity, CancellationToken ct = default) { await DbSet.AddAsync(entity, ct); await DbContext.SaveChangesAsync(ct); } protected async Task AddRangeAsync(IEnumerable entities, CancellationToken ct = default) { await DbSet.AddRangeAsync(entities, ct); await DbContext.SaveChangesAsync(ct); } protected async Task UpdateAsync(TEntity entity, CancellationToken ct = default) { DbSet.Update(entity); await DbContext.SaveChangesAsync(ct); } protected async Task DeleteAsync(TEntity entity, CancellationToken ct = default) { DbSet.Remove(entity); await DbContext.SaveChangesAsync(ct); } protected async Task DeleteRangeAsync(IEnumerable entities, CancellationToken ct = default) { DbSet.RemoveRange(entities); await DbContext.SaveChangesAsync(ct); } protected Task ExistsAsync(Expression> predicate, CancellationToken ct = default) => DbSet.AnyAsync(predicate, ct); protected Task SaveAsync(CancellationToken ct = default) => DbContext.SaveChangesAsync(ct); }