diff --git a/FilterLists.sln b/FilterLists.sln index 3854315e0..3397768d6 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -41,7 +41,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{A4BB2C81-5232-4162-B410-704D123D2C01}" ProjectSection(SolutionItems) = preProject scripts\sql\createDb.sql = scripts\sql\createDb.sql - scripts\sql\monitorForDuplicateRules.sql = scripts\sql\monitorForDuplicateRules.sql + scripts\sql\getDuplicateRules.sql = scripts\sql\getDuplicateRules.sql scripts\sql\resetSnapshotsRules.sql = scripts\sql\resetSnapshotsRules.sql scripts\sql\snapshotTimeAnalysis.sql = scripts\sql\snapshotTimeAnalysis.sql EndProjectSection diff --git a/src/FilterLists.Services/Snapshot/SnapshotBatch.cs b/src/FilterLists.Services/Snapshot/SnapshotBatch.cs index 59139cf56..dd3cb225f 100644 --- a/src/FilterLists.Services/Snapshot/SnapshotBatch.cs +++ b/src/FilterLists.Services/Snapshot/SnapshotBatch.cs @@ -22,14 +22,24 @@ public SnapshotBatch(FilterListsDbContext dbContext, IEnumerable lines, } public async Task SaveAsync() + { + var rules = GetOrCreateRules(); + CreateSnapRules(rules); + await dbContext.SaveChangesAsync(); + } + + private IQueryable GetOrCreateRules() { var existingRules = dbContext.Rules.Join(lines, rule => rule.Raw, line => line, (rule, line) => rule); var newRules = lines.Except(existingRules.Select(r => r.Raw)).Select(l => new Rule {Raw = l}).ToList(); dbContext.Rules.AddRange(newRules); - var rules = existingRules.Concat(newRules); - var snapshotRules = rules.Select(r => new SnapshotRule {Rule = r}).ToList(); - snapEntity.SnapshotRules = snapshotRules; - await dbContext.SaveChangesAsync(); + return existingRules.Concat(newRules); + } + + private void CreateSnapRules(IQueryable rules) + { + var snapRules = rules.Select(r => new SnapshotRule {Rule = r}).ToList(); + snapEntity.SnapshotRules = snapRules; } } } \ No newline at end of file