mirror of
https://github.com/collinbarrett/FilterLists.git
synced 2026-03-11 09:04:27 +00:00
wip
This commit is contained in:
parent
540b1e4d91
commit
9d00e76901
2 changed files with 25 additions and 23 deletions
|
|
@ -71,7 +71,7 @@ private async Task SaveAsync()
|
|||
if (lines != null)
|
||||
{
|
||||
await SaveInBatches(lines);
|
||||
await DedupSnapshotRules();
|
||||
await AddRemovedSnapshotRules();
|
||||
await SetSuccessful();
|
||||
}
|
||||
|
||||
|
|
@ -136,11 +136,10 @@ private static async Task SaveBatches(IEnumerable<SnapshotBatch> batches)
|
|||
await batch.SaveAsync();
|
||||
}
|
||||
|
||||
private async Task DedupSnapshotRules()
|
||||
private async Task AddRemovedSnapshotRules()
|
||||
{
|
||||
var existingSnapshotRules = GetExistingSnapshotRules();
|
||||
AddRemovedBySnapshots(existingSnapshotRules);
|
||||
RemoveDuplicateSnapshotRules(existingSnapshotRules);
|
||||
await dbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
|
@ -157,15 +156,6 @@ private void AddRemovedBySnapshots(IQueryable<SnapshotRule> existingSnapshotRule
|
|||
removedSnapshotRules.ForEach(sr => sr.RemovedBySnapshot = snapEntity);
|
||||
}
|
||||
|
||||
private void RemoveDuplicateSnapshotRules(IQueryable<SnapshotRule> existingSnapshotRules)
|
||||
{
|
||||
var duplicateSnapshotRules = dbContext.SnapshotRules.Where(sr =>
|
||||
sr.AddedBySnapshot == snapEntity &&
|
||||
existingSnapshotRules.Any(e =>
|
||||
e.Rule == sr.Rule && e.RemovedBySnapshot == null));
|
||||
dbContext.SnapshotRules.RemoveRange(duplicateSnapshotRules);
|
||||
}
|
||||
|
||||
private async Task SetSuccessful()
|
||||
{
|
||||
snapEntity.WasSuccessful = true;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ public class SnapshotBatch
|
|||
private readonly FilterListsDbContext dbContext;
|
||||
private readonly IEnumerable<string> lines;
|
||||
private readonly Data.Entities.Snapshot snapEntity;
|
||||
private IQueryable<Rule> existingRules;
|
||||
|
||||
public SnapshotBatch(FilterListsDbContext dbContext, IEnumerable<string> lines,
|
||||
Data.Entities.Snapshot snapEntity)
|
||||
|
|
@ -24,21 +25,32 @@ public SnapshotBatch(FilterListsDbContext dbContext, IEnumerable<string> lines,
|
|||
|
||||
public async Task SaveAsync()
|
||||
{
|
||||
var existingRules = GetExistingRules();
|
||||
var newRules = CreateNewRules(existingRules);
|
||||
dbContext.Rules.AddRange(newRules);
|
||||
var rules = existingRules.Concat(newRules);
|
||||
AddSnapshotRules(rules);
|
||||
GetExistingRules();
|
||||
AddAddedSnapshotRulesForExistingRules();
|
||||
AddAddedSnapshotRulesForNewRules();
|
||||
await dbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
private IQueryable<Rule> GetExistingRules() =>
|
||||
dbContext.Rules.Join(lines, rule => rule.Raw, line => line, (rule, line) => rule);
|
||||
private void GetExistingRules() =>
|
||||
existingRules = dbContext.Rules.Join(lines, rule => rule.Raw, line => line, (rule, line) => rule);
|
||||
|
||||
private List<Rule> CreateNewRules(IQueryable<Rule> existingRules) =>
|
||||
lines.Except(existingRules.Select(r => r.Raw)).Select(r => new Rule {Raw = r}).ToList();
|
||||
private void AddAddedSnapshotRulesForExistingRules()
|
||||
{
|
||||
var existingSnapshotRules = dbContext.SnapshotRules
|
||||
.Where(sr =>
|
||||
existingRules.Contains(sr.Rule) &&
|
||||
sr.AddedBySnapshot.FilterListId == snapEntity.FilterListId &&
|
||||
sr.RemovedBySnapshot == null);
|
||||
var newSnapshotRules = existingRules.Where(r => !existingSnapshotRules.Select(sr => sr.Rule).Contains(r))
|
||||
.Select(r => new SnapshotRule {Rule = r});
|
||||
snapEntity.AddedSnapshotRules.AddRange(newSnapshotRules);
|
||||
}
|
||||
|
||||
private void AddSnapshotRules(IQueryable<Rule> rules) =>
|
||||
snapEntity.AddedSnapshotRules.AddRange(rules.Select(r => new SnapshotRule {Rule = r}));
|
||||
private void AddAddedSnapshotRulesForNewRules()
|
||||
{
|
||||
var rules = lines.Except(existingRules.Select(r => r.Raw)).Select(l => new Rule {Raw = l});
|
||||
var snapshotRules = rules.Select(r => new SnapshotRule {Rule = r});
|
||||
snapEntity.AddedSnapshotRules.AddRange(snapshotRules);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue