Глобальный рефакторинг пространств имён
This commit is contained in:
+67
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+39
@@ -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;
|
||||
}
|
||||
}
|
||||
+24
@@ -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() { }
|
||||
}
|
||||
+97
@@ -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
|
||||
{
|
||||
//
|
||||
}
|
||||
+41
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
+50
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user