Глобальный рефакторинг пространств имён

This commit is contained in:
2025-10-02 13:29:30 +04:00
parent d23d81fb53
commit 2fa94851cb
3176 changed files with 27146 additions and 30584 deletions
@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json.Linq;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.Aonprd.Compendium;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Processors.Preparation;
[Processor(
"aonprd:compendium",
Description = "Загрузка компендиума",
Group = ProcessorGroupEnum.AonprdPreparation
)]
[ProcessorDependencies(["aonprd:repository"])]
internal class CompendiumLoadProcessor(
AonprdRepository repository,
AonprdCompendium compendium,
ProcessProgress progress
) : IProcessor
{
public AonprdRepository Repository { get; } = repository;
public AonprdCompendium Compendium { get; } = compendium;
public ProcessProgress Progress { get; } = progress;
public void Process()
{
using StreamReader indexFile = new(
Path.Combine(Repository.RepositoryDirPath, "index.json")
);
JObject indexJson = JObject.Parse(indexFile.ReadToEnd());
Progress.Local.Reset(indexJson.Count);
foreach ((string file, JToken? value) in indexJson)
{
Progress.Local.Start(file);
JArray items = (JArray)value!;
foreach (JToken item in items)
{
AonprdCompendiumItem compendiumItem = new(item.ToString(), file);
Compendium.Items.Add(compendiumItem);
}
Progress.Local.End();
}
Progress.Local.Complete();
}
public void Save()
{
List<AonprdCompendiumItem> result = Compendium.Items.OrderBy(item => item.Id).ToList();
Compendium.Items.Clear();
foreach (AonprdCompendiumItem item in result)
{
Compendium.Items.Add(item);
}
}
}
@@ -0,0 +1,39 @@
using Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
using Pf2e.Database;
using Pf2e.Database.Model.Base.Targets;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Processors.Preparation;
[Processor(
"aonprd:external",
Description = "Создание цели внешних ссылок",
Group = ProcessorGroupEnum.AonprdPreparation
)]
[ProcessorDependencies(["aonprd:repository"])]
internal class ExternalProcessor(AonprdBuilderGlobals globals) : AbstractSimpleProcessor
{
public Pf2eDbContext Context { get; } = new();
public AonprdBuilderGlobals Globals { get; } = globals;
public ExternalTarget AonprdTarget = null!;
public override void Process()
{
AonprdTarget = new()
{
Name = AonprdImporter.TargetName,
Icon = "http://www.google.com/s2/favicons?domain=2e.aonprd.com",
Prefix = "https://2e.aonprd.com",
};
}
public override void Save()
{
Context.ExternalTargets.Add(AonprdTarget);
Context.SaveChanges();
Globals.AonprdTarget = AonprdTarget;
}
}
@@ -0,0 +1,24 @@
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Processors.Preparation;
[Processor(
"aonprd:repository",
Description = "Обновление репозитория",
Group = ProcessorGroupEnum.AonprdPreparation
)]
internal class RepositoryUpdateProcessor(AonprdRepository repository, ProcessProgress progress)
: IProcessor
{
public AonprdRepository Repository { get; } = repository;
public ProcessProgress Progress { get; } = progress;
public void Process()
{
Repository.Update(Progress);
}
public void Save() { }
}
@@ -0,0 +1,97 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.Aonprd.Compendium;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.SchemaBuilder;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Processors.Preparation;
[Processor(
"aonprd:schema",
Description = "Построение схемы данных",
Group = ProcessorGroupEnum.AonprdPreparation,
Active = false
)]
[ProcessorDependencies(["aonprd:repository", "aonprd:compendium"])]
internal class SchemaBuildProcessor(
AonprdImporter importer,
AonprdCompendium compendium,
ProcessProgress progress,
ApplicationSettings settings
) : AbstractSchemaBuildProcessor
{
/// <inheritdoc cref="AonprdImporter"/>
protected AonprdImporter Importer { get; } = importer;
/// <inheritdoc cref="AonprdCompendium"/>
protected override AonprdCompendium Compendium { get; } = compendium;
/// <inheritdoc cref="ProcessProgress"/>
protected override ProcessProgress Progress { get; } = progress;
/// <inheritdoc cref="ApplicationSettings"/>
protected ApplicationSettings Settings { get; } = settings;
/// <inheritdoc/>
protected override string SavePath => Path.Combine(Settings.OutputDirPath, Importer.Slug);
/// <inheritdoc/>
protected override AonprdTypeResolver Resolver { get; } = new();
/// <summary>
/// Список типов, являющихся подклассами.
/// </summary>
private readonly string[] _subclassSchemaTypes =
[
"research-field",
"apparition",
"practice",
"instinct",
"muse",
"cause",
"tenet",
"doctrine",
"druidic-order",
"methodology",
"element",
"hybrid-study",
"mystery",
"conscious-mind",
"subconscious-mind",
"hunters-edge",
"racket",
"bloodline",
"style",
"implement",
"lesson",
"patron",
"arcane-school",
"arcane-thesis",
"way",
"innovation",
"ikon",
"epithet",
];
protected override ICollection<string> GetSchemaNodes(AbstractCompendiumItem item)
{
List<string> nodes = [item.Type];
// Нода подкласса
if (_subclassSchemaTypes.Contains(item.Type))
{
nodes.Add("_subclass");
}
return nodes;
}
}
/// <inheritdoc/>
internal class AonprdTypeResolver : TypeResolver
{
//
}
@@ -0,0 +1,41 @@
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
using Pf2e.Database;
using Pf2e.Database.Model.Common;
using Pf2e.Database.Model.Common.I18n;
using Pf2e.Database.Model.Enum;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Processors.Preparation;
[ProcessorCollection(
"aonprd:skill",
CompendiumType = ProcessorCompendiumEnum.Aonprd,
InnerType = "skill",
Description = "Навыки",
Group = ProcessorGroupEnum.AonprdPreparation
)]
[ProcessorDependencies(["aonprd:compendium"])]
internal class SkillProcessor(ProcessorInput input, Pf2eDbContext context)
: AbstractInputProcessor(input)
{
public Pf2eDbContext Context { get; } = context;
/// <summary>
/// Обучаемый объект.
/// </summary>
public Training Training = null!;
/// <inheritdoc/>
public override void Save() => Context.Trainings.Add(Training);
/// <inheritdoc/>
public override void Process()
{
Training = new()
{
Name = new() { { LocaleType.English, Input.GetRequired<string>("name") } },
Type = TrainingType.Skill,
};
}
}
@@ -0,0 +1,50 @@
using System;
using Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
using Pf2e.Database;
using Pf2e.Database.Model.Base.Source;
using Pf2e.Database.Model.Enum;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Processors.Preparation;
[ProcessorCollection(
"aonprd:source",
InnerType = "source",
CompendiumType = ProcessorCompendiumEnum.Aonprd,
Description = "Источники",
Group = ProcessorGroupEnum.AonprdPreparation
)]
[ProcessorDependencies(["aonprd:compendium"])]
internal class SourceProcessor(ProcessorInput input, AonprdBuilderGlobals globals)
: AbstractInputProcessor(input)
{
public AonprdBuilderGlobals Globals { get; } = globals;
public Pf2eDbContext Context { get; } = new();
/// <summary>
/// Источник сущности.
/// </summary>
protected Source Source = null!;
/// <inheritdoc/>
public override void Process()
{
Source = new()
{
Name = Input.GetRequired<string>("name"),
Category = Input.EnumRequired<SourceCategory>("primary_source_category"),
ReleaseDate = DateOnly.Parse(Input.GetRequired<string>("release_date")),
};
}
/// <inheritdoc/>
public override void Save()
{
Context.Sources.Add(Source);
Context.SaveChanges();
Globals.SourceIds.Add(Source.Name, Source.Id);
}
}