From e46cd99f418e65845590534da51bf2c9a6a44049 Mon Sep 17 00:00:00 2001 From: Ilya Kozhemyakin Date: Thu, 15 May 2025 10:21:18 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B5=D0=BA=20=D1=81=D0=B2?= =?UTF-8?q?=D1=8F=D0=B7=D0=B5=D0=B9=20=D1=83=D1=81=D1=82=D0=B0=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D1=88=D0=B8=D1=85=20=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D1=91=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pf2eDataScrapper/App/ProcessorGroupEnum.cs | 3 + .../Finalization/LegacyRemasterProcessors.cs | 58 +++++++++++++++++++ .../Aonprd/Processors/Types/TraitProcessor.cs | 2 +- 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs diff --git a/Pf2eDataScrapper/App/ProcessorGroupEnum.cs b/Pf2eDataScrapper/App/ProcessorGroupEnum.cs index fcf7fc6..563e41e 100644 --- a/Pf2eDataScrapper/App/ProcessorGroupEnum.cs +++ b/Pf2eDataScrapper/App/ProcessorGroupEnum.cs @@ -17,6 +17,9 @@ public enum ProcessorGroupEnum [Description("Архивы Нефиса: Подклассы")] AonprdSubclasses, + [Description("Архивы Нефиса: Завершение")] + AonprdFinalization, + [Description("Foundry EN: Подготовка")] FoundryEnPreparation, diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs new file mode 100644 index 0000000..d5a9479 --- /dev/null +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs @@ -0,0 +1,58 @@ +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json.Linq; +using Pf2eDataScrapper.App; +using Pf2eDataScrapper.Processors; +using Pf2eModel; +using Pf2eModel.Model.Base.Targets; + +namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Processors.Finalization; + +[ProcessorCollection( + "aonprd:legacy-remaster", + InnerType = null, + CompendiumType = ProcessorCompendiumEnum.Aonprd, + Description = "Связь устаревших и обновлённых сущностей", + Group = ProcessorGroupEnum.AonprdFinalization, + Parallel = true +)] +internal class LegacyRemasterProcessors(ProcessorInput input) : AbstractInputProcessor(input) +{ + private Pf2eDbContext Context { get; set; } = new(); + + public override void Process() + { + string aonprdId = Input.GetRequired("id"); + EntityExternal entity = + Context.EntityExternals.AsNoTracking().FirstOrDefault(x => x.ExternalId == aonprdId) + ?? throw new SilentSkipItemException(); + int entityId = entity.EntityId; + + foreach (int remasterId in GetEntityIds("remaster_id")) + { + Context.LegacyRemasters.Add(new() { LegacyId = entityId, RemasterId = remasterId }); + } + + foreach (int legacyId in GetEntityIds("legacy_id")) + { + Context.LegacyRemasters.Add(new() { LegacyId = legacyId, RemasterId = entityId }); + } + } + + protected List GetEntityIds(string path) + { + List aonprdIds = (Input.GetOptional("path") ?? []) + .Select(token => token.ToString()) + .ToList(); + + return Context + .EntityExternals.AsNoTracking() + .Where(x => aonprdIds.Contains(x.ExternalId)) + .Select(x => x.EntityId) + .ToList(); + } + + public override void Save() + { + Context.SaveChanges(); + } +} diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs index db6443d..033ece3 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs @@ -16,7 +16,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Processors.Types; Description = "Признаки", Group = ProcessorGroupEnum.AonprdEntities )] -[ProcessorDependencies(["aonprd:legacy"])] +[ProcessorDependencies(["aonprd:external", "aonprd:source"])] internal class TraitProcessor( ProcessorInput input, StringHelper stringHelper,