diff --git a/Pf2eDataScrapper/EnvSettings.cs b/Pf2eDataScrapper/EnvSettings.cs
index 39b438c..d618c46 100644
--- a/Pf2eDataScrapper/EnvSettings.cs
+++ b/Pf2eDataScrapper/EnvSettings.cs
@@ -1,26 +1,39 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using dotenv.net;
+using dotenv.net;
using dotenv.net.Utilities;
namespace Pf2eDataScrapper
{
- internal class EnvSettings
+ ///
+ /// Класс настроек.
+ ///
+ internal static class EnvSettings
{
+ ///
+ /// Загрузка файла настроек `.env`.
+ ///
public static void Load()
{
DotEnv.Load();
}
+ ///
+ /// Путь к папке с входными данными.
+ ///
public static string DataDirPath => EnvReader.GetStringValue("DATA_DIR");
+ ///
+ /// Папка в входными данными.
+ ///
public static DirectoryInfo DataDir => new(DataDirPath);
+ ///
+ /// Путь к папке для сохранения результатов.
+ ///
public static string OutputDirPath => EnvReader.GetStringValue("OUTPUT_DIR");
+ ///
+ /// Папка для сохранения результатов.
+ ///
public static string OutputDir => new(OutputDirPath);
}
diff --git a/Pf2eDataScrapper/Importers/AbstractImporter.cs b/Pf2eDataScrapper/Importers/AbstractImporter.cs
index 6994c80..785cb51 100644
--- a/Pf2eDataScrapper/Importers/AbstractImporter.cs
+++ b/Pf2eDataScrapper/Importers/AbstractImporter.cs
@@ -1,11 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Pf2eDataScrapper.Importers
+namespace Pf2eDataScrapper.Importers
{
+ ///
+ /// Абстрактный класс импортёра
+ ///
internal abstract class AbstractImporter
{
///
@@ -28,7 +25,14 @@ namespace Pf2eDataScrapper.Importers
///
public string Dir => Path.Combine(EnvSettings.DataDirPath, Slug);
+ ///
+ /// Метод подготовки данных для импорта
+ ///
public abstract void Prepare();
+
+ ///
+ /// Импорт данных
+ ///
public abstract void Import();
}
diff --git a/Pf2eDataScrapper/Importers/GitLoader.cs b/Pf2eDataScrapper/Importers/GitLoader.cs
index 2643721..d4c3de8 100644
--- a/Pf2eDataScrapper/Importers/GitLoader.cs
+++ b/Pf2eDataScrapper/Importers/GitLoader.cs
@@ -1,20 +1,30 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Diagnostics;
namespace Pf2eDataScrapper.Importers
{
- internal class GitLoader(string DataDirPath)
+ ///
+ /// Загрузчик данных из git-репозиториев
+ ///
+ ///
+ internal class GitLoader(string repositoryDirPath)
{
- public readonly string DataDirPath = DataDirPath;
- public DirectoryInfo DataDir = new(DataDirPath);
+ ///
+ /// Путь к директории репозитория
+ ///
+ public readonly string RepositoryDirPath = repositoryDirPath;
+ ///
+ /// Директория репозитория
+ ///
+ public DirectoryInfo RepositoryDir = new(repositoryDirPath);
+
+ ///
+ /// Обновление импортёра
+ ///
+ ///
public void UpdateImporter(AbstractImporter importer)
{
- string gitPath = Path.Combine(DataDirPath, importer.Slug);
+ var gitPath = Path.Combine(RepositoryDirPath, importer.Slug);
if (Directory.Exists(gitPath))
{
@@ -38,7 +48,7 @@ namespace Pf2eDataScrapper.Importers
StartInfo = new ProcessStartInfo()
{
FileName = "git",
- WorkingDirectory = DataDirPath,
+ WorkingDirectory = RepositoryDirPath,
Arguments = $"clone {importer.GitUrl} {importer.Slug}",
}
};
diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumDocumentType.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumDocumentType.cs
index b7f9b9b..ce2b9f5 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumDocumentType.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumDocumentType.cs
@@ -1,11 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
+namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
{
+ ///
+ /// Тип документов компендиума.
+ ///
internal enum CompendiumDocumentType
{
Actor,
diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolder.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolder.cs
index 69e1e17..41b1b6b 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolder.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolder.cs
@@ -1,32 +1,52 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Linq;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
{
+ ///
+ /// Папка компендиума.
+ ///
internal class CompendiumFolder
{
+ ///
+ /// Идентификатор папки.
+ ///
public readonly string Id;
+ ///
+ /// Название папки.
+ ///
public readonly string Name;
+ ///
+ /// Путь к папке.
+ ///
public readonly string? Path;
+ ///
+ /// Указатель, что папка содержится в других папках.
+ ///
public readonly bool IsContained;
+ ///
+ /// Родительская папка.
+ ///
public CompendiumFolder? Parent;
+ ///
+ /// Тип документов в папке.
+ ///
public readonly CompendiumDocumentType Type;
+ ///
+ /// Конструктор папки компендиума из JSON-объекта.
+ ///
+ ///
public CompendiumFolder(JObject json)
{
- if (json.ContainsKey("_id"))
+ if (json.TryGetValue("_id", out var id))
{
// Вложенная папка через _folders.json
- Id = json["_id"]!.ToString();
+ Id = id!.ToString();
Name = json["name"]!.ToString();
Path = null;
IsContained = true;
@@ -43,6 +63,11 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
Type = (CompendiumDocumentType)Enum.Parse(typeof(CompendiumDocumentType), json["type"]!.ToString());
}
+ ///
+ /// Конструктор папки компендиума.
+ ///
+ /// Идентификатор папки.
+ /// Название папки.
public CompendiumFolder(string id, string name)
{
Id = id;
@@ -51,6 +76,10 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
IsContained = false;
}
+ ///
+ /// Строковое представление данных о папки компендиума.
+ ///
+ /// Строковое представление данных о папки компендиума.
public override string ToString()
{
return $"CompendiumFolder([Id={Id}][Type={Type}][Name={Name}][Path={Path}][Parent={Parent?.Name ?? "null"}])";
diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolderCollection.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolderCollection.cs
index fb15a4c..7eae065 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolderCollection.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumFolderCollection.cs
@@ -1,14 +1,15 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
+namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
{
+ ///
+ /// Коллекция папок компендиума
+ ///
internal class CompendiumFolderCollection : List
{
-
+ ///
+ /// Получение папки по идентификатору
+ ///
+ /// Искомый идентификатор
+ /// Искомая папка
public CompendiumFolder? GetById(string id)
{
return this.FirstOrDefault(x => x.Id == id);
diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumSchemaBuilder.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumSchemaBuilder.cs
index 19c7723..48e906a 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumSchemaBuilder.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Compendium/CompendiumSchemaBuilder.cs
@@ -1,27 +1,46 @@
using Konsole;
using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.SchemaBuilder;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
{
+ ///
+ /// Класс построения схемы компендиумов.
+ ///
+ /// Загрузчик данных.
internal class CompendiumSchemaBuilder(CompendiumLoader loader)
{
+ ///
+ /// Загрузчик данных.
+ ///
public CompendiumLoader Loader = loader;
+ ///
+ /// Коллекция папок компендиума.
+ ///
public CompendiumFolderCollection Collection = loader.Collection;
+ ///
+ /// Объект для определения типов полей в компендиумах PF2E.
+ ///
public CompendiumSchemaTypeResolver Resolver = new();
+ ///
+ /// Схемы данных по папкам.
+ ///
public Dictionary PackSchemas = [];
+ ///
+ /// Схемы данных по типам.
+ ///
public Dictionary TypeSchemas = [];
-
+ ///
+ /// Получение набора схем, к которым относится проверяемый объект.
+ ///
+ /// Папка компендиума, в которой находится объект.
+ /// Указанный тип объекта.
+ ///
protected List GetItemSchemas(CompendiumFolder folder, string? itemType)
{
if (!PackSchemas.ContainsKey(folder))
@@ -47,6 +66,9 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
return [PackSchemas[folder], TypeSchemas[key]];
}
+ ///
+ /// Построение схем данных.
+ ///
public void BuildSchemas()
{
Console.WriteLine("Building schemas...");
@@ -90,6 +112,10 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
bar.Refresh(Loader.ItemCount, "Done!");
}
+ ///
+ /// Сохранение данных.
+ ///
+ /// Папка для сохранения.
public void Save(string targetDir)
{
Console.WriteLine("Dumping schemas...");
@@ -127,6 +153,12 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
Console.WriteLine("Done!");
}
+ ///
+ /// Сохранение конкретной схемы.
+ ///
+ /// Корневая папка для сохранения этой категории схем.
+ /// Название сохраняемой схемы.
+ /// Сохраняемая схема.
protected void SaveSchema(string dir, string name, SchemaNode schema)
{
var invalids = System.IO.Path.GetInvalidFileNameChars();
@@ -134,7 +166,6 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
var path = Path.Combine(dir, fileName + ".txt");
-
var dirPath = Path.GetDirectoryName(path);
if (!Directory.Exists(dirPath))
diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/CompendiumLoader.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/CompendiumLoader.cs
index 1a55870..bd48d00 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/CompendiumLoader.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/CompendiumLoader.cs
@@ -1,22 +1,39 @@
-using System.Reflection.PortableExecutable;
-using System.Text.RegularExpressions;
-using Konsole;
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
-using Pf2eDataScrapper.SchemaBuilder;
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
{
- internal class CompendiumLoader(Pf2eFoundryImporter importer)
+ ///
+ /// Загрузчик данных компендиума
+ ///
+ /// Импортёр
+ internal class CompendiumLoader(Pf2EFoundryImporter importer)
{
- public readonly Pf2eFoundryImporter Importer = importer;
+ ///
+ /// Импортёр
+ ///
+ public readonly Pf2EFoundryImporter Importer = importer;
+ ///
+ /// Набор папок компендиума
+ ///
public CompendiumFolderCollection Collection = [];
+ ///
+ /// Счётчик папок
+ ///
private int _folderCount = 0;
+ ///
+ /// Общее количество элементов в компендиуме
+ ///
public int ItemCount { get; protected set; } = 0;
+ ///
+ /// Обработка папок компендиума в поле `packFolders`.
+ ///
+ ///
+ ///
protected void ProcessPackFolders(JArray folders, CompendiumFolder? parent)
{
foreach (var token in folders)
@@ -53,6 +70,9 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
}
}
+ ///
+ /// Подготовка набора папок компендиума
+ ///
public void Prepare()
{
using var systemFile = new StreamReader(Path.Combine(Importer.Dir, "static", "system.json"));
@@ -104,10 +124,5 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
Console.WriteLine($"Total items: {ItemCount}");
}
-
- public void Run()
- {
- this.Prepare();
- }
}
}
diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Pf2eFoundryImporter.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Pf2eFoundryImporter.cs
index e165b03..04b68b6 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Pf2eFoundryImporter.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/Pf2eFoundryImporter.cs
@@ -1,43 +1,52 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
+namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
{
- internal class Pf2eFoundryImporter : AbstractImporter
+ ///
+ /// Импортёр для модуля Pf2e FoundryVTT.
+ ///
+ internal class Pf2EFoundryImporter : AbstractImporter
{
///
- /// Отображаемое имя импортёра
+ /// Отображаемое имя импортёра.
///
public override string Name => "Pf2e FoundryVTT module";
///
- /// Короткое имя импортёра
+ /// Короткое имя импортёра.
///
public override string Slug => "pf2e";
///
- /// Ссылка на git-репозиторий для клонирования
+ /// Ссылка на git-репозиторий для клонирования.
///
public override string GitUrl => "https://github.com/foundryvtt/pf2e.git";
+ ///
+ /// Загрузчик данных компендиума.
+ ///
public CompendiumLoader Loader { get; }
- public Pf2eFoundryImporter()
+ ///
+ /// Конструктор импортёра.
+ ///
+ public Pf2EFoundryImporter()
{
Loader = new CompendiumLoader(this);
}
+ ///
+ /// Метод подготовки данных для импорта.
+ ///
public override void Prepare()
{
Loader.Prepare();
}
+ ///
+ /// Импорт данных.
+ ///
public override void Import()
{
- Loader.Run();
+ Loader.Prepare();
}
}
}
diff --git a/Pf2eDataScrapper/Program.cs b/Pf2eDataScrapper/Program.cs
index d913a59..a7b09d2 100644
--- a/Pf2eDataScrapper/Program.cs
+++ b/Pf2eDataScrapper/Program.cs
@@ -9,10 +9,10 @@ EnvSettings.Load();
Console.WriteLine("Hello, World!");
-//var loader = new GitLoader(EnvSettings.DataDirPath);
+//var loader = new GitLoader(EnvSettings.RepositoryDirPath);
-var importer = new Pf2eFoundryImporter();
+var importer = new Pf2EFoundryImporter();
//loader.UpdateImporter(importer);
diff --git a/Pf2eDataScrapper/SchemaBuilder/Types/AbstractSchemaType.cs b/Pf2eDataScrapper/SchemaBuilder/Types/AbstractSchemaType.cs
index 0834703..e5b6ea1 100644
--- a/Pf2eDataScrapper/SchemaBuilder/Types/AbstractSchemaType.cs
+++ b/Pf2eDataScrapper/SchemaBuilder/Types/AbstractSchemaType.cs
@@ -55,8 +55,7 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
{
return $"{GetTypeName()} {Parent.Path}";
}
-
-
+
///
/// Отступ для строкового представления.
///