Сохранение всех устаревших элементов

This commit is contained in:
2025-05-16 18:28:53 +04:00
parent e46cd99f41
commit f1ca9ec3e4
15 changed files with 95 additions and 110 deletions
@@ -18,25 +18,19 @@ internal abstract class AbstractCompendium
/// </summary> /// </summary>
public string Dir => Repository.RepositoryDirPath; public string Dir => Repository.RepositoryDirPath;
/// <summary>
/// Возвращает количество элементов в компендиуме.
/// </summary>
/// <returns>Количество элементов.</returns>
public abstract int Count();
/// <summary> /// <summary>
/// Возвращает количество элементов для указанного типа данных. /// Возвращает количество элементов для указанного типа данных.
/// </summary> /// </summary>
/// <param name="type">Тип данных.</param> /// <param name="type">Типы данных.</param>
/// <returns>Количество элементов.</returns> /// <returns>Количество элементов.</returns>
public abstract int Count(string type); public abstract int Count(params ICollection<string> type);
/// <summary> /// <summary>
/// Получение итератора сущностей. Если указан тип <paramref name="type"/> - то только указанного типа. /// Получение итератора сущностей. Если указан тип <paramref name="type"/> - то только указанного типа.
/// </summary> /// </summary>
/// <param name="type">Тип сущностей, которые нужно получить.</param> /// <param name="type">Типы сущностей, которые нужно получить.</param>
/// <returns>Итератор сущностей.</returns> /// <returns>Итератор сущностей.</returns>
public abstract IEnumerable<Tuple<AbstractCompendiumItem, JObject>> Iterate( public abstract IEnumerable<Tuple<AbstractCompendiumItem, JObject>> Iterate(
string? type = null params ICollection<string> type
); );
} }
@@ -1,4 +1,6 @@
namespace Pf2eDataScrapper.Importers; using System.IO;
namespace Pf2eDataScrapper.Importers;
/// <summary> /// <summary>
/// Абстрактный класс импортёра. /// Абстрактный класс импортёра.
@@ -1,4 +1,6 @@
using Newtonsoft.Json.Linq; using System.IO;
using System.Net.Http;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Importers.Repositories; using Pf2eDataScrapper.Importers.Repositories;
@@ -1,4 +1,5 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.IO;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium;
@@ -8,6 +9,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium;
/// </summary> /// </summary>
internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCompendium internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCompendium
{ {
/// <inheritdoc/>
public override AonprdRepository Repository { get; } = repository; public override AonprdRepository Repository { get; } = repository;
/// <summary> /// <summary>
@@ -15,29 +17,22 @@ internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCo
/// </summary> /// </summary>
public ConcurrentBag<AonprdCompendiumItem> Items { get; } = []; public ConcurrentBag<AonprdCompendiumItem> Items { get; } = [];
/// <summary> /// <inheritdoc/>
/// Возвращает количество элементов в компендиуме. public override int Count(params ICollection<string> types) =>
/// </summary> types.Count == 0 ? Items.Count : Items.Count(i => types.Contains(i.Type));
/// <returns>Количество элементов.</returns>
public override int Count() => Items.Count;
/// <summary> /// <inheritdoc/>
/// Возвращает количество элементов для указанного типа данных. public override IEnumerable<Tuple<AbstractCompendiumItem, JObject>> Iterate(
/// </summary> params ICollection<string> types
/// <param name="type">Тип данных.</param> )
/// <returns>Количество элементов.</returns>
public override int Count(string type) => Items.Count(i => i.Type == type);
/// <summary>
/// Получение итератора сущностей. Если указан тип <paramref name="type"/> - то только указанного типа.
/// </summary>
/// <param name="type">Тип сущностей, которые нужно получить.</param>
/// <returns>Итератор сущностей.</returns>
public override IEnumerable<Tuple<AbstractCompendiumItem, JObject>> Iterate(string? type = null)
{ {
IEnumerable<string> files = type is null IEnumerable<string> files =
? Items.Select(t => t.File).Distinct() types.Count == 0
: Items.Where(t => t.Type == type).Select(t => t.File).Distinct(); ? Items.Select(item => item.File).Distinct()
: Items
.Where(item => types.Contains(item.Type))
.Select(item => item.File)
.Distinct();
foreach (string file in files) foreach (string file in files)
{ {
@@ -57,16 +52,12 @@ internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCo
if ( if (
id is null id is null
|| !fileReferences.TryGetValue(id, out AonprdCompendiumItem? reference) || !fileReferences.TryGetValue(id, out AonprdCompendiumItem? reference)
|| !types.Contains(reference.Type)
) )
{ {
continue; continue;
} }
if (type is not null && reference.Type != type)
{
continue;
}
yield return new(reference, (JObject)item); yield return new(reference, (JObject)item);
} }
} }
@@ -1,4 +1,5 @@
using Pf2eModel.Model.Base.Source; using System.IO;
using Pf2eModel.Model.Base.Source;
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers; namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers;
@@ -46,7 +46,7 @@ internal class LegacyRemasterProcessors(ProcessorInput input) : AbstractInputPro
return Context return Context
.EntityExternals.AsNoTracking() .EntityExternals.AsNoTracking()
.Where(x => aonprdIds.Contains(x.ExternalId)) .Where(x => aonprdIds.Contains(x.ExternalId!))
.Select(x => x.EntityId) .Select(x => x.EntityId)
.ToList(); .ToList();
} }
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq; using System.IO;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.App; using Pf2eDataScrapper.App;
using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium;
@@ -1,4 +1,5 @@
using Pf2eDataScrapper.App; using System.IO;
using Pf2eDataScrapper.App;
using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium;
using Pf2eDataScrapper.SchemaBuilder; using Pf2eDataScrapper.SchemaBuilder;
@@ -0,0 +1,51 @@
using System.Collections.Concurrent;
using System.IO;
using Newtonsoft.Json.Linq;
namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium;
/// <summary>
/// Загрузчик данных компендиума.
/// </summary>
/// <param name="repository">Репозиторий данных.</param>
internal sealed class FoundryEnCompendium(
FoundryEnRepository repository,
CompendiumFolderCollection folders
) : AbstractCompendium
{
/// <inheritdoc/>
public override FoundryEnRepository Repository { get; } = repository;
/// <summary>
/// Набор папок компендиума
/// </summary>
public CompendiumFolderCollection Folders { get; } = folders;
/// <summary>
/// Коллекция всех записей компендиума.
/// </summary>
public ConcurrentBag<FoundryEnCompendiumItem> Items { get; } = [];
/// <inheritdoc/>
public override int Count(params ICollection<string> types) =>
types.Count == 0 ? Items.Count : Items.Count(i => types.Contains(i.Type));
/// <inheritdoc/>
public override IEnumerable<Tuple<AbstractCompendiumItem, JObject>> Iterate(
params ICollection<string> types
)
{
foreach (
FoundryEnCompendiumItem item in types.Count == 0
? Items
: Items.Where(i => types.Contains(i.Type))
)
{
using StreamReader fileReader = new(
Path.Combine(Repository.RepositoryDirPath, item.File)
);
yield return new(item, JObject.Parse(fileReader.ReadToEnd()));
}
}
}
@@ -1,64 +0,0 @@
using System.Collections.Concurrent;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium;
namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn;
/// <summary>
/// Загрузчик данных компендиума.
/// </summary>
/// <param name="repository">Репозиторий данных.</param>
internal sealed class FoundryEnCompendium(
FoundryEnRepository repository,
CompendiumFolderCollection folders
) : AbstractCompendium
{
/// <summary>
/// Репозиторий данных.
/// </summary>
public override FoundryEnRepository Repository { get; } = repository;
/// <summary>
/// Набор папок компендиума
/// </summary>
public CompendiumFolderCollection Folders { get; } = folders;
/// <summary>
/// Коллекция всех записей компендиума.
/// </summary>
public ConcurrentBag<FoundryEnCompendiumItem> Items { get; } = [];
/// <summary>
/// Возвращает количество элементов в компендиуме.
/// </summary>
/// <returns>Количество элементов.</returns>
public override int Count() => Items.Count;
/// <summary>
/// Возвращает количество элементов для указанного типа данных.
/// </summary>
/// <param name="type">Тип данных.</param>
/// <returns>Количество элементов.</returns>
public override int Count(string type) => Items.Count(i => i.Type == type);
/// <summary>
/// Получение итератора сущностей. Если указан тип <paramref name="type"/> - то только указанного типа.
/// </summary>
/// <param name="type">Тип сущностей, которые нужно получить.</param>
/// <returns>Итератор сущностей.</returns>
public override IEnumerable<Tuple<AbstractCompendiumItem, JObject>> Iterate(string? type = null)
{
IEnumerable<FoundryEnCompendiumItem> items = type is null
? Items
: Items.Where(i => i.Type == type);
foreach (FoundryEnCompendiumItem item in items)
{
using StreamReader fileReader = new(
Path.Combine(Repository.RepositoryDirPath, item.File)
);
yield return new(item, JObject.Parse(fileReader.ReadToEnd()));
}
}
}
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq; using System.IO;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.App; using Pf2eDataScrapper.App;
using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium;
using Pf2eDataScrapper.Processors; using Pf2eDataScrapper.Processors;
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq; using System.IO;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.App; using Pf2eDataScrapper.App;
using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium;
@@ -1,5 +1,7 @@
using Pf2eDataScrapper.App; using System.IO;
using Pf2eDataScrapper.App;
using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium;
using Pf2eDataScrapper.SchemaBuilder; using Pf2eDataScrapper.SchemaBuilder;
namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn.Processors.Preparation; namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn.Processors.Preparation;
@@ -1,4 +1,5 @@
using Pf2eDataScrapper.Helpers; using System.IO;
using Pf2eDataScrapper.Helpers;
namespace Pf2eDataScrapper.Importers.Repositories; namespace Pf2eDataScrapper.Importers.Repositories;
@@ -1,4 +1,5 @@
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Helpers;
namespace Pf2eDataScrapper.Importers.Repositories; namespace Pf2eDataScrapper.Importers.Repositories;