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

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> /// </summary>
public abstract void Import(); public abstract void Import();
/// <summary>
/// Построение схем данных
/// </summary>
public abstract void BuildSchemas();
} }
} }
@@ -21,7 +21,8 @@
/// <returns></returns> /// <returns></returns>
public CompendiumFolderCollection Filter() 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; using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
@@ -119,12 +120,52 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
} }
} }
foreach (var folder in Collection) // foreach (var folder in Collection)
{ // {
Console.WriteLine(folder); // Console.WriteLine(folder);
} // }
Collection = Collection.Filter();
Console.WriteLine($"Total items: {ItemCount}"); 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> /// <summary>
/// Импортёр для модуля Pf2e FoundryVTT. /// Импортёр для модуля Pf2e FoundryVTT.
@@ -46,7 +49,21 @@
/// </summary> /// </summary>
public override void Import() 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 Konsole;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
using Pf2eDataScrapper.SchemaBuilder; using Pf2eDataScrapper.SchemaBuilder;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
{ {
/// <summary> /// <summary>
/// Класс построения схемы компендиумов. /// Класс построения схемы компендиумов.
@@ -97,36 +98,15 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
var bar = new ProgressBar(Loader.ItemCount); var bar = new ProgressBar(Loader.ItemCount);
var i = 0; 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)) var schemas = GetItemSchemas(entry.Folder, entry.Type);
foreach (var schema in schemas)
{ {
bar.Refresh(i++, folder.Name); schema.AddValue(entry.Json);
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());
foreach (var schema in schemas)
{
schema.AddValue(itemJson);
}
} }
} }
@@ -7,7 +7,7 @@ using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.SchemaBuilder; using Pf2eDataScrapper.SchemaBuilder;
using Pf2eDataScrapper.SchemaBuilder.Types; using Pf2eDataScrapper.SchemaBuilder.Types;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
{ {
internal class CompendiumSchemaTypeResolver : TypeResolver internal class CompendiumSchemaTypeResolver : TypeResolver
{ {
+11 -33
View File
@@ -1,46 +1,24 @@
using Newtonsoft.Json.Linq; using Pf2eDataScrapper;
using Pf2eDataScrapper;
using Pf2eDataScrapper.Importers;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry; using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
using Pf2eDataScrapper.SchemaBuilder;
EnvSettings.Load(); EnvSettings.Load();
Console.WriteLine("Hello, World!");
//var loader = new GitLoader(EnvSettings.RepositoryDirPath);
var importer = new Pf2EFoundryImporter(); var importer = new Pf2EFoundryImporter();
//loader.UpdateImporter(importer);
importer.Prepare(); importer.Prepare();
var builder = new CompendiumSchemaBuilder(importer.Loader); try
builder.BuildSchemas();
builder.Save(EnvSettings.OutputDir);
// var q = importer.Loader.BuildSchemas();
// SchemaDumper.Dump(q);
return;
JObject data;
using (var reader = new StreamReader("test.json"))
{ {
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);