Рефакторинг и подготовка к созданию обработчиков импорта

This commit is contained in:
2025-04-14 18:44:22 +04:00
parent 73bba7a865
commit 492323a4c0
7 changed files with 92 additions and 71 deletions
@@ -35,5 +35,9 @@
/// </summary>
public abstract void Import();
/// <summary>
/// Построение схем данных
/// </summary>
public abstract void BuildSchemas();
}
}
@@ -21,7 +21,8 @@
/// <returns></returns>
public CompendiumFolderCollection Filter()
{
return [.. this.FindAll(x => x.Type != CompendiumDocumentType.Actor)];
// return [.. this.FindAll(x => x.Type != CompendiumDocumentType.Actor)];
return [.. this.FindAll(x => x.Type != CompendiumDocumentType.Actor && x.Name == "Conditions")];
}
}
}
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
@@ -119,12 +120,52 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
}
}
foreach (var folder in Collection)
{
Console.WriteLine(folder);
}
// foreach (var folder in Collection)
// {
// Console.WriteLine(folder);
// }
Collection = Collection.Filter();
Console.WriteLine($"Total items: {ItemCount}");
}
public IEnumerable<LoaderEnrty> Enrties()
{
foreach (var folder in Collection.FindAll(f => f.Path is not null))
{
var dirPath = Path.Combine(Importer.Dir, folder.Path!);
foreach (var filePath in Directory.GetFiles(dirPath, "*.json", SearchOption.AllDirectories))
{
var file = new FileInfo(filePath);
if (file.Name == "_folders.json")
{
continue;
}
using var reader = new StreamReader(file.FullName);
var itemJson = JObject.Parse(reader.ReadToEnd());
var itemFolder = folder;
if (itemJson.TryGetValue("folder", out var itemJsonFolder))
{
itemFolder = Collection.GetById(itemJsonFolder.ToString());
}
yield return new LoaderEnrty(file, itemJson, itemFolder ?? folder);
}
}
}
public class LoaderEnrty(FileInfo file, JObject itemJson, CompendiumFolder folder)
{
public FileInfo File { get; } = file;
public JObject Json { get; } = itemJson;
public CompendiumFolder Folder { get; } = folder;
public string Type { get; } = itemJson["type"]?.ToString()
?? throw new Exception($"Expected to have `type` field in file {file.FullName}");
}
}
}
@@ -1,4 +1,7 @@
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
{
/// <summary>
/// Импортёр для модуля Pf2e FoundryVTT.
@@ -46,7 +49,21 @@
/// </summary>
public override void Import()
{
Loader.Prepare();
var builder = new PF2eFoundryDataBuilder(Loader);
builder.TruncateTables();
builder.Build();
}
/// <summary>
/// Построение схем данных
/// </summary>
public override void BuildSchemas()
{
var builder = new CompendiumSchemaBuilder(Loader);
builder.BuildSchemas();
builder.Save(EnvSettings.OutputDir);
}
}
}
@@ -1,8 +1,9 @@
using Konsole;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
using Pf2eDataScrapper.SchemaBuilder;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
{
/// <summary>
/// Класс построения схемы компендиумов.
@@ -97,36 +98,15 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
var bar = new ProgressBar(Loader.ItemCount);
var i = 0;
foreach (var folder in Collection.FindAll(f => f.Path is not null))
foreach (var entry in Loader.Enrties())
{
var dirPath = Path.Combine(Loader.Importer.Dir, folder.Path!);
bar.Refresh(i++, entry.Folder.Name);
foreach (var filePath in Directory.GetFiles(dirPath, "*.json", SearchOption.AllDirectories))
{
bar.Refresh(i++, folder.Name);
var file = new FileInfo(filePath);
if (file.Name == "_folders.json")
{
continue;
}
using var reader = new StreamReader(file.FullName);
var itemJson = JObject.Parse(reader.ReadToEnd());
var itemFolder = folder;
if (itemJson.TryGetValue("folder", out var itemJsonFolder))
{
itemFolder = Collection.GetById(itemJsonFolder.ToString());
}
var schemas = GetItemSchemas(itemFolder ?? folder, itemJson["type"]?.ToString());
var schemas = GetItemSchemas(entry.Folder, entry.Type);
foreach (var schema in schemas)
{
schema.AddValue(itemJson);
}
schema.AddValue(entry.Json);
}
}
@@ -7,7 +7,7 @@ using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.SchemaBuilder;
using Pf2eDataScrapper.SchemaBuilder.Types;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
{
internal class CompendiumSchemaTypeResolver : TypeResolver
{
+11 -33
View File
@@ -1,46 +1,24 @@
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper;
using Pf2eDataScrapper.Importers;
using Pf2eDataScrapper;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
using Pf2eDataScrapper.SchemaBuilder;
EnvSettings.Load();
Console.WriteLine("Hello, World!");
//var loader = new GitLoader(EnvSettings.RepositoryDirPath);
var importer = new Pf2EFoundryImporter();
//loader.UpdateImporter(importer);
importer.Prepare();
var builder = new CompendiumSchemaBuilder(importer.Loader);
builder.BuildSchemas();
builder.Save(EnvSettings.OutputDir);
// var q = importer.Loader.BuildSchemas();
// SchemaDumper.Dump(q);
return;
JObject data;
using (var reader = new StreamReader("test.json"))
try
{
data = JObject.Parse(reader.ReadToEnd());
importer.Import();
}
catch (Exception ex)
{
Console.WriteLine(ex);
//Console.WriteLine(ex.Message);
//Console.WriteLine(ex.InnerException);
//Console.WriteLine(ex.StackTrace);
}
// importer.BuildSchemas();
SchemaNode schema = new();
schema.AddValue(data);
Console.WriteLine(schema);