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,