diff --git a/src/FilterLists.Services/Snapshot/SnapshotDe.cs b/src/FilterLists.Services/Snapshot/SnapshotDe.cs index fad4d4505..0a8df38e0 100644 --- a/src/FilterLists.Services/Snapshot/SnapshotDe.cs +++ b/src/FilterLists.Services/Snapshot/SnapshotDe.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using FilterLists.Data; using FilterLists.Data.Entities.Junctions; -using FilterLists.Services.Extensions; using FilterLists.Services.Snapshot.Models; using MoreLinq; @@ -29,10 +28,14 @@ public SnapshotDe(FilterListsDbContext dbContext, EmailService emailService, Fil this.dbContext = dbContext; this.emailService = emailService; this.list = list; - snapshot = new Data.Entities.Snapshot {FilterListId = list.Id}; + snapshot = new Data.Entities.Snapshot + { + FilterListId = list.Id, + AddedSnapshotRules = new List() + }; } - public async Task SaveSnapshotAsync() + public async Task SaveAsync() { using (var transaction = dbContext.Database.BeginTransaction()) { @@ -122,12 +125,12 @@ private async Task SendExceptionEmail(Exception e) private async Task SaveSnapshotInBatches(string content) { - var rawRules = GetRawRules(content); - var snapshotBatches = GetSnapshotBatches(rawRules); + var rawRules = ParseRawRules(content); + var snapshotBatches = CreateSnapshotBatches(rawRules); await SaveSnapshotBatches(snapshotBatches); } - private static IEnumerable GetRawRules(string content) + private static IEnumerable ParseRawRules(string content) { var rawRules = content.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < rawRules.Length; i++) @@ -135,13 +138,13 @@ private static IEnumerable GetRawRules(string content) return new HashSet(rawRules.Where(r => r != null)); } - private IEnumerable GetSnapshotBatches(IEnumerable rawRules) => - rawRules.Batch(BatchSize).Select(b => new SnapshotBatchDe(dbContext, snapshot, b)); + private IEnumerable CreateSnapshotBatches(IEnumerable rawRules) => + rawRules.Batch(BatchSize).Select(b => new SnapshotDeBatch(dbContext, snapshot, b)); - private static async Task SaveSnapshotBatches(IEnumerable snapshotBatches) + private static async Task SaveSnapshotBatches(IEnumerable snapshotBatches) { foreach (var snapshotBatch in snapshotBatches) - await snapshotBatch.SaveSnapshotBatchAsync(); + await snapshotBatch.SaveAsync(); } private async Task DedupSnapshotRules() diff --git a/src/FilterLists.Services/Snapshot/SnapshotBatchDe.cs b/src/FilterLists.Services/Snapshot/SnapshotDeBatch.cs similarity index 65% rename from src/FilterLists.Services/Snapshot/SnapshotBatchDe.cs rename to src/FilterLists.Services/Snapshot/SnapshotDeBatch.cs index 555f5bc5c..7422d3cd4 100644 --- a/src/FilterLists.Services/Snapshot/SnapshotBatchDe.cs +++ b/src/FilterLists.Services/Snapshot/SnapshotDeBatch.cs @@ -8,14 +8,14 @@ namespace FilterLists.Services.Snapshot { - public class SnapshotBatchDe + public class SnapshotDeBatch { private readonly FilterListsDbContext dbContext; private readonly IEnumerable rawRules; private readonly Data.Entities.Snapshot snapshot; private IQueryable rules; - public SnapshotBatchDe(FilterListsDbContext dbContext, Data.Entities.Snapshot snapshot, + public SnapshotDeBatch(FilterListsDbContext dbContext, Data.Entities.Snapshot snapshot, IEnumerable rawRules) { this.dbContext = dbContext; @@ -23,7 +23,7 @@ public SnapshotBatchDe(FilterListsDbContext dbContext, Data.Entities.Snapshot sn this.rawRules = rawRules; } - public async Task SaveSnapshotBatchAsync() + public async Task SaveAsync() { await AddRules(); AddSnapshotRules(); @@ -32,18 +32,18 @@ public async Task SaveSnapshotBatchAsync() private async Task AddRules() { - var existingRules = dbContext.Rules.Where(r => rawRules.Contains(r.Raw)); - var newRawRules = rawRules.Except(existingRules.Select(r => r.Raw)); - var newRules = newRawRules.Select(r => new Rule {Raw = r}).ToList(); + var existingRules = GetExistingRules(); + var newRules = CreateNewRules(existingRules); rules = existingRules.Concat(newRules); await dbContext.Rules.AddRangeAsync(newRules); } - private void AddSnapshotRules() - { - if (snapshot.AddedSnapshotRules == null) - snapshot.AddedSnapshotRules = new List(); + private IQueryable GetExistingRules() => dbContext.Rules.Where(r => rawRules.Contains(r.Raw)); + + private List CreateNewRules(IQueryable existingRules) => + rawRules.Except(existingRules.Select(r => r.Raw)).Select(r => new Rule {Raw = r}).ToList(); + + private void AddSnapshotRules() => snapshot.AddedSnapshotRules.AddRange(rules.Select(r => new SnapshotRule {Rule = r})); - } } } \ No newline at end of file diff --git a/src/FilterLists.Services/Snapshot/SnapshotService.cs b/src/FilterLists.Services/Snapshot/SnapshotService.cs index 870d8ffe7..c53959a93 100644 --- a/src/FilterLists.Services/Snapshot/SnapshotService.cs +++ b/src/FilterLists.Services/Snapshot/SnapshotService.cs @@ -69,7 +69,7 @@ private IEnumerable CreateSnapshots(IEnumerable snapshots) { foreach (var snapshot in snapshots) - await snapshot.SaveSnapshotAsync(); + await snapshot.SaveAsync(); } } } \ No newline at end of file