using Comal.Classes; using InABox.Core; using InABox.Database; namespace PRS.Shared.Database_Update_Scripts; internal class Update_8_25 : DatabaseUpdateScript { private static readonly int CHUNK_SIZE = 500; private static readonly bool DESTRUCTIVE = false; public override VersionNumber Version => new(8, 25); public override bool Update() { var _provider = DbFactory.NewProvider(Logger.Main); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); CheckProblemNotes(_provider); return true; } private void CheckProblemNotes(IProvider provider) where T : Entity, IProblems, new() { Queue _updates = new Queue(); Logger.Send(LogType.Information, "", $"Checking {typeof(T).EntityName().Split('.').Last()} Problem Notes"); var _problems = provider.Query( new Filter(x=>x.Problem.Notes).IsNotEqualTo(Array.Empty()), Columns.None() .Add(x=>x.ID) .Add(x=>x.Problem.Notes) ).ToObjects(); foreach (var _problem in _problems) { if (_problem.Problem.Notes is string[] _notes && _notes.Length <= 1 && string.IsNullOrWhiteSpace(_notes.FirstOrDefault())) { _problem.Problem.Notes = null; _updates.Enqueue(_problem); } } while (_updates.Any()) { var _chunk = _updates.Dequeue(100).ToArray(); Logger.Send(LogType.Information, "", $"- Updating {_chunk.Length} {typeof(T).EntityName().Split('.').Last()} Problems ({_updates.Count} remaining)"); provider.Save(_chunk); } } }