From afdc5d3f81fa7d3435a17c4a5bd6e79f0cd7da40 Mon Sep 17 00:00:00 2001 From: Ilya Kozhemyakin Date: Thu, 15 May 2025 09:49:57 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D0=B7=20=D0=BE=D1=82?= =?UTF-8?q?=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BB=D0=B5=D0=B3=D0=B0=D1=81=D0=B8-=D1=81=D1=83=D1=89=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/EntityViewForm.Designer.cs | 32 +-- Pf2eDataScrapper/Forms/EntityViewForm.resx | 2 +- Pf2eDataScrapper/Forms/StartForm.Designer.cs | 26 +- Pf2eDataScrapper/Forms/StartForm.resx | 2 +- .../Processors/AbstractEntityProcessor.cs | 32 --- .../Processors/Common/LegacyProcessor.cs | 111 -------- .../Aonprd/Processors/Types/TraitProcessor.cs | 6 - .../Processors/FoundryEnAbstractProcessor.cs | 2 +- ...signer.cs => 20250515054227_1.Designer.cs} | 269 +++++++----------- ...0250514120355_1.cs => 20250515054227_1.cs} | 209 ++++++-------- .../Migrations/Pf2eDbContextModelSnapshot.cs | 267 +++++++---------- Pf2eModel/Model/Base/Entity.cs | 13 +- Pf2eModel/Model/Base/EntityAlias.cs | 37 +++ Pf2eModel/Model/Base/Legacy/LegacyEntity.cs | 42 --- .../Model/Base/Legacy/LegacyEntityExternal.cs | 58 ---- .../Model/Base/Legacy/LegacyEntitySource.cs | 59 ---- Pf2eModel/Model/Base/LegacyRemaster.cs | 35 +++ Pf2eModel/Model/Base/Source/Source.cs | 6 - .../Model/Base/Targets/ExternalTarget.cs | 6 - Pf2eModel/Pf2eDbContext.cs | 9 +- Pf2eModel/Pf2eDbContextModel.cs | 51 ++-- 21 files changed, 415 insertions(+), 859 deletions(-) delete mode 100644 Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Common/LegacyProcessor.cs rename Pf2eModel/Migrations/{20250514120355_1.Designer.cs => 20250515054227_1.Designer.cs} (94%) rename Pf2eModel/Migrations/{20250514120355_1.cs => 20250515054227_1.cs} (94%) create mode 100644 Pf2eModel/Model/Base/EntityAlias.cs delete mode 100644 Pf2eModel/Model/Base/Legacy/LegacyEntity.cs delete mode 100644 Pf2eModel/Model/Base/Legacy/LegacyEntityExternal.cs delete mode 100644 Pf2eModel/Model/Base/Legacy/LegacyEntitySource.cs create mode 100644 Pf2eModel/Model/Base/LegacyRemaster.cs diff --git a/Pf2eDataScrapper/Forms/EntityViewForm.Designer.cs b/Pf2eDataScrapper/Forms/EntityViewForm.Designer.cs index e2982e4..3a18dd8 100644 --- a/Pf2eDataScrapper/Forms/EntityViewForm.Designer.cs +++ b/Pf2eDataScrapper/Forms/EntityViewForm.Designer.cs @@ -38,7 +38,7 @@ partial class EntityViewForm DescriptionTextBox = new TextBox(); DatabaseViewer = new DatabaseViewerControl(); EntityTreeViewerControl = new EntityTreeViewerControl(); - MainMenuStrip = new MenuStrip(); + MenuStrip = new MenuStrip(); FileToolStripMenuItem = new ToolStripMenuItem(); ExitToolStripMenuItem = new ToolStripMenuItem(); WindowsToolStripMenuItem = new ToolStripMenuItem(); @@ -54,7 +54,7 @@ partial class EntityViewForm ((System.ComponentModel.ISupportInitialize)ResultSplitContainer).BeginInit(); ResultSplitContainer.Panel2.SuspendLayout(); ResultSplitContainer.SuspendLayout(); - MainMenuStrip.SuspendLayout(); + MenuStrip.SuspendLayout(); SuspendLayout(); // // RootSplitContainer @@ -110,10 +110,6 @@ partial class EntityViewForm ResultSplitContainer.Location = new Point(0, 0); ResultSplitContainer.Name = "ResultSplitContainer"; // - // ResultSplitContainer.Panel1 - // - ResultSplitContainer.Panel1.Controls.Add(EntityTreeViewerControl); - // // ResultSplitContainer.Panel2 // ResultSplitContainer.Panel2.Controls.Add(DescriptionTextBox); @@ -156,14 +152,14 @@ partial class EntityViewForm EntityTreeViewerControl.TabIndex = 0; EntityTreeViewerControl.TypeFontSize = 7F; // - // MainMenuStrip + // MenuStrip // - MainMenuStrip.Items.AddRange(new ToolStripItem[] { FileToolStripMenuItem, WindowsToolStripMenuItem }); - MainMenuStrip.Location = new Point(0, 0); - MainMenuStrip.Name = "MainMenuStrip"; - MainMenuStrip.Size = new Size(1384, 24); - MainMenuStrip.TabIndex = 1; - MainMenuStrip.Text = "menuStrip1"; + MenuStrip.Items.AddRange(new ToolStripItem[] { FileToolStripMenuItem, WindowsToolStripMenuItem }); + MenuStrip.Location = new Point(0, 0); + MenuStrip.Name = "MainMenuStrip"; + MenuStrip.Size = new Size(1384, 24); + MenuStrip.TabIndex = 1; + MenuStrip.Text = "menuStrip1"; // // FileToolStripMenuItem // @@ -175,7 +171,7 @@ partial class EntityViewForm // ExitToolStripMenuItem // ExitToolStripMenuItem.Name = "ExitToolStripMenuItem"; - ExitToolStripMenuItem.Size = new Size(180, 22); + ExitToolStripMenuItem.Size = new Size(109, 22); ExitToolStripMenuItem.Text = "Выход"; ExitToolStripMenuItem.Click += ExitToolStripMenuItem_Click; // @@ -206,7 +202,7 @@ partial class EntityViewForm AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1384, 861); Controls.Add(RootSplitContainer); - Controls.Add(MainMenuStrip); + Controls.Add(MenuStrip); Name = "EntityViewForm"; Text = "DataBaseViewer"; RootSplitContainer.Panel1.ResumeLayout(false); @@ -220,8 +216,8 @@ partial class EntityViewForm ResultSplitContainer.Panel2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)ResultSplitContainer).EndInit(); ResultSplitContainer.ResumeLayout(false); - MainMenuStrip.ResumeLayout(false); - MainMenuStrip.PerformLayout(); + MenuStrip.ResumeLayout(false); + MenuStrip.PerformLayout(); ResumeLayout(false); PerformLayout(); } @@ -235,7 +231,7 @@ partial class EntityViewForm private TextBox DescriptionTextBox; private EntityTreeViewerControl EntityTreeViewerControl; private DatabaseViewerControl DatabaseViewer; - private MenuStrip MainMenuStrip; + private MenuStrip MenuStrip; private ToolStripMenuItem FileToolStripMenuItem; private ToolStripMenuItem ExitToolStripMenuItem; private ToolStripMenuItem WindowsToolStripMenuItem; diff --git a/Pf2eDataScrapper/Forms/EntityViewForm.resx b/Pf2eDataScrapper/Forms/EntityViewForm.resx index 51c499e..9b2a006 100644 --- a/Pf2eDataScrapper/Forms/EntityViewForm.resx +++ b/Pf2eDataScrapper/Forms/EntityViewForm.resx @@ -117,7 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 diff --git a/Pf2eDataScrapper/Forms/StartForm.Designer.cs b/Pf2eDataScrapper/Forms/StartForm.Designer.cs index 297306d..7519395 100644 --- a/Pf2eDataScrapper/Forms/StartForm.Designer.cs +++ b/Pf2eDataScrapper/Forms/StartForm.Designer.cs @@ -36,7 +36,7 @@ partial class StartForm SelectAllButton = new Button(); DeselectAllButton = new Button(); StartButton = new Button(); - MainMenuStrip = new MenuStrip(); + MenuStrip = new MenuStrip(); FileToolStripMenuItem = new ToolStripMenuItem(); ExitToolStripMenuItem = new ToolStripMenuItem(); WindowsToolStripMenuItem = new ToolStripMenuItem(); @@ -49,7 +49,7 @@ partial class StartForm MainSplitContainer.SuspendLayout(); PropertiesGroupBox.SuspendLayout(); ProcessorsGroupBox.SuspendLayout(); - MainMenuStrip.SuspendLayout(); + MenuStrip.SuspendLayout(); SuspendLayout(); // // MainSplitContainer @@ -143,14 +143,14 @@ partial class StartForm StartButton.UseVisualStyleBackColor = true; StartButton.Click += StartButton_Click; // - // MainMenuStrip + // MenuStrip // - MainMenuStrip.Items.AddRange(new ToolStripItem[] { FileToolStripMenuItem, WindowsToolStripMenuItem, StartToolStripMenuItem }); - MainMenuStrip.Location = new Point(0, 0); - MainMenuStrip.Name = "MainMenuStrip"; - MainMenuStrip.Size = new Size(931, 24); - MainMenuStrip.TabIndex = 1; - MainMenuStrip.Text = "menuStrip1"; + MenuStrip.Items.AddRange(new ToolStripItem[] { FileToolStripMenuItem, WindowsToolStripMenuItem, StartToolStripMenuItem }); + MenuStrip.Location = new Point(0, 0); + MenuStrip.Name = "MenuStrip"; + MenuStrip.Size = new Size(931, 24); + MenuStrip.TabIndex = 1; + MenuStrip.Text = "menuStrip1"; // // FileToolStripMenuItem // @@ -200,7 +200,7 @@ partial class StartForm AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(931, 677); Controls.Add(MainSplitContainer); - Controls.Add(MainMenuStrip); + Controls.Add(MenuStrip); Name = "StartForm"; Text = "Настройки импорта данных"; Load += StartForm_Load; @@ -210,8 +210,8 @@ partial class StartForm MainSplitContainer.ResumeLayout(false); PropertiesGroupBox.ResumeLayout(false); ProcessorsGroupBox.ResumeLayout(false); - MainMenuStrip.ResumeLayout(false); - MainMenuStrip.PerformLayout(); + MenuStrip.ResumeLayout(false); + MenuStrip.PerformLayout(); ResumeLayout(false); PerformLayout(); } @@ -226,7 +226,7 @@ partial class StartForm private Button SelectAllButton; private Button DeselectAllButton; private Controls.ProcessorCollectionControl ProcessorCollectionControl; - private MenuStrip MainMenuStrip; + private MenuStrip MenuStrip; private ToolStripMenuItem FileToolStripMenuItem; private ToolStripMenuItem ExitToolStripMenuItem; private ToolStripMenuItem WindowsToolStripMenuItem; diff --git a/Pf2eDataScrapper/Forms/StartForm.resx b/Pf2eDataScrapper/Forms/StartForm.resx index fc37e2c..2099966 100644 --- a/Pf2eDataScrapper/Forms/StartForm.resx +++ b/Pf2eDataScrapper/Forms/StartForm.resx @@ -117,7 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 \ No newline at end of file diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs index d035a3c..9121e01 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs @@ -7,7 +7,6 @@ using Pf2eDataScrapper.Processors; using Pf2eModel; using Pf2eModel.Model; using Pf2eModel.Model.Base; -using Pf2eModel.Model.Base.Legacy; using Pf2eModel.Model.Base.Source; using Pf2eModel.Model.Base.Targets; using Pf2eModel.Model.Common.I18n; @@ -59,17 +58,10 @@ internal abstract class AbstractEntityProcessor( /// public override void Process() { - if (Input.GetOptional("remaster_id") is not null) - { - throw new LegacyItemException(Input.GetOptional("name", "")); - } - AddEntity(); AddSource(); AddExternal(); AddTraits(); - - AddLegacy(); } /// @@ -229,29 +221,5 @@ internal abstract class AbstractEntityProcessor( } } - /// - /// Добавление устаревших сущностей. - /// - protected virtual void AddLegacy() - { - JArray? legacyIdArray = Input.GetOptional("legacy_id"); - - if (legacyIdArray is null || legacyIdArray.Count == 0) - { - return; - } - - string[] legacyIds = legacyIdArray.ToArray().Select(t => t.ToString()).ToArray(); - List legacyEntities = Context - .LegacyEntityExternals.Where(lee => legacyIds.Contains(lee.ExternalId)) - .Select(lee => lee.LegacyEntity) - .ToList(); - - foreach (LegacyEntity legacyEntity in legacyEntities) - { - Entity.LegacyEntities.Add(legacyEntity); - } - } - #endregion } diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Common/LegacyProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Common/LegacyProcessor.cs deleted file mode 100644 index e376d9b..0000000 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Common/LegacyProcessor.cs +++ /dev/null @@ -1,111 +0,0 @@ -using Newtonsoft.Json.Linq; -using Pf2eDataScrapper.App; -using Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers; -using Pf2eDataScrapper.Processors; -using Pf2eModel; -using Pf2eModel.Model.Base.Legacy; -using Pf2eModel.Model.Common.I18n; -using StringHelper = Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers.StringHelper; - -namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Processors.Common; - -[ProcessorCollection( - "aonprd:legacy", - InnerType = null, - CompendiumType = ProcessorCompendiumEnum.Aonprd, - Description = "Создание ссылок на устаревшие сущности", - Group = ProcessorGroupEnum.AonprdPreparation, - Parallel = true -)] -[ProcessorDependencies(["aonprd:source", "aonprd:external"])] -internal class LegacyProcessor( - ProcessorInput input, - AonprdBuilderGlobals globals, - StringHelper stringHelper -) : AbstractInputProcessor(input) -{ - public Pf2eDbContext Context { get; } = new(); - public AonprdBuilderGlobals Globals { get; } = globals; - public StringHelper StringHelper { get; } = stringHelper; - - private LegacyEntity LegacyEntity { get; set; } = null!; - - public override void Process() - { - if (Input.GetOptional("remaster_id") is null) - { - throw new SilentSkipItemException(); - } - - LegacyEntity = new() - { - Name = { [LocaleType.English] = Input.GetOptional("name", "sidebar-29") }, - }; - - AddSource(); - AddExternal(); - } - - /// - /// Генерация источников сущности. - /// - protected virtual void AddSource() - { - string[] sourceNames = Input - .GetRequired("source") - .Select(token => token.ToString()) - .ToArray(); - - if (sourceNames.Length == 0) - { - throw new( - $"Source for entity with id \"{LegacyEntity.Name[LocaleType.English]}\" " - + $"(Aonprd id \"{Input.GetRequired("id")}\") is not found" - ); - } - /* - Dictionary sourceIds = Context - .Sources.AsNoTracking() - .Where(s => sourceNames.Contains(s.Name)) - .ToDictionary(s => s.Name, s => s.Id); - */ - foreach (string sourceName in sourceNames) - { - LegacyEntitySource entitySource = new() - { - LegacyEntity = LegacyEntity, - SourceId = Globals.SourceIds[sourceName], - Suffix = StringHelper.ResolveSource(Input.GetRequired("source_markdown")), - IsRemaster = Input.GetOptional("legacy_id") is not null, - }; - - Context.LegacyEntitySources.Add(entitySource); - LegacyEntity.Sources.Add(entitySource); - } - } - - /// - /// Генерация внешних ссылок сущности. - /// - protected virtual void AddExternal() - { - LegacyEntityExternal external = new() - { - LegacyEntity = LegacyEntity, - TargetId = Globals.AonprdTarget.Id, - ExternalId = Input.GetRequired("id"), - Suffix = Input.GetRequired("url"), - Md5 = Input.Md5(), - }; - - Context.LegacyEntityExternals.Add(external); - } - - public override void Save() - { - Context.LegacyEntities.Add(LegacyEntity); - - Context.SaveChanges(false); - Context.Dispose(); - } -} diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs index fb5cd39..db6443d 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/TraitProcessor.cs @@ -2,7 +2,6 @@ using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers; using Pf2eDataScrapper.Processors; -using Pf2eModel.Model.Base.Legacy; using Pf2eModel.Model.Common.I18n; using Pf2eModel.Model.Enum; using Pf2eModel.Model.Structure; @@ -37,11 +36,6 @@ internal class TraitProcessor( Context.Traits.Add(Object); Globals.TraitIds[Entity.Name[LocaleType.English]] = Entity.Id; - - foreach (LegacyEntity legacyEntity in Entity.LegacyEntities) - { - Globals.TraitIds[legacyEntity.Name[LocaleType.English]] = Entity.Id; - } } /// diff --git a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/FoundryEnAbstractProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/FoundryEnAbstractProcessor.cs index 829fc9d..3c25f0f 100644 --- a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/FoundryEnAbstractProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/FoundryEnAbstractProcessor.cs @@ -56,7 +56,7 @@ internal abstract class FoundryEnAbstractProcessor( { Type = LocaleType.English, Alias = Entity.Group, - EntityId = Entity.Id, + LegacyId = Entity.Id, Entity = Entity }; Context.EntityAliases.Add(alias); diff --git a/Pf2eModel/Migrations/20250514120355_1.Designer.cs b/Pf2eModel/Migrations/20250515054227_1.Designer.cs similarity index 94% rename from Pf2eModel/Migrations/20250514120355_1.Designer.cs rename to Pf2eModel/Migrations/20250515054227_1.Designer.cs index f1f0fcb..c3d5113 100644 --- a/Pf2eModel/Migrations/20250514120355_1.Designer.cs +++ b/Pf2eModel/Migrations/20250515054227_1.Designer.cs @@ -13,7 +13,7 @@ using Pf2eModel.Model.Enum; namespace Pf2eModel.Migrations { [DbContext(typeof(Pf2eDbContext))] - [Migration("20250514120355_1")] + [Migration("20250515054227_1")] partial class _1 { /// @@ -86,25 +86,6 @@ namespace Pf2eModel.Migrations b.ToTable("entity_keyword", (string)null); }); - modelBuilder.Entity("EntityLegacyEntity", b => - { - b.Property("LegacyEntitiesId") - .HasColumnType("integer") - .HasColumnName("legacy_entities_id"); - - b.Property("RemasterEntitiesId") - .HasColumnType("integer") - .HasColumnName("remaster_entities_id"); - - b.HasKey("LegacyEntitiesId", "RemasterEntitiesId") - .HasName("pk_entity_legacy_entity"); - - b.HasIndex("RemasterEntitiesId") - .HasDatabaseName("ix_entity_legacy_entity_remaster_entities_id"); - - b.ToTable("entity_legacy_entity", (string)null); - }); - modelBuilder.Entity("EntityTrait", b => { b.Property("EntitiesId") @@ -194,6 +175,40 @@ namespace Pf2eModel.Migrations b.ToTable("entities", (string)null); }); + modelBuilder.Entity("Pf2eModel.Model.Base.EntityAlias", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1) + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(2) + .HasComment("Связанная сущность"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(3) + .HasComment("Алиас"); + + b.HasKey("Id") + .HasName("pk_entity_aliases"); + + b.HasIndex("EntityId") + .HasDatabaseName("ix_entity_aliases_entity_id"); + + b.ToTable("entity_aliases", (string)null); + }); + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.Keyword", b => { b.Property("Id") @@ -259,121 +274,52 @@ namespace Pf2eModel.Migrations b.ToTable("keyword_aliases", (string)null); }); - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntity", b => + modelBuilder.Entity("Pf2eModel.Model.Base.LegacyRemaster", b => { - b.Property("Id") - .ValueGeneratedOnAdd() + b.Property("LegacyId") .HasColumnType("integer") - .HasColumnName("id") - .HasColumnOrder(1); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Name") - .IsRequired() - .HasColumnType("jsonb") - .HasColumnName("name") - .HasColumnOrder(2) - .HasComment("Отображаемое имя"); - - b.HasKey("Id") - .HasName("pk_legacy_entities"); - - b.ToTable("legacy_entities", (string)null); - }); - - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntityExternal", b => - { - b.Property("LegacyEntityId") - .HasColumnType("integer") - .HasColumnName("legacy_entity_id") + .HasColumnName("legacy_id") .HasColumnOrder(1) .HasComment("Идентификатор сущности"); - b.Property("TargetId") + b.Property("RemasterId") .HasColumnType("integer") - .HasColumnName("target_id") + .HasColumnName("remaster_id") .HasColumnOrder(2) .HasComment("Идентификатор цели"); - b.Property("ExternalId") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("external_id") - .HasColumnOrder(3); - - b.Property("Md5") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("md5") - .HasColumnOrder(5) - .HasComment("Контрольная сумма объекта"); - - b.Property("Suffix") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("suffix") - .HasColumnOrder(4) - .HasComment("Часть URL до объекта. Для источников Foundry - полный UUID объекта"); - - b.HasKey("LegacyEntityId", "TargetId") - .HasName("pk_legacy_entity_externals"); - - b.HasIndex("TargetId") - .HasDatabaseName("ix_legacy_entity_externals_target_id"); - - b.ToTable("legacy_entity_externals", (string)null); - }); - - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntitySource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() + b.Property("LegacyEntitiesId") .HasColumnType("integer") - .HasColumnName("id") - .HasColumnOrder(0) - .HasComment("Идентификатор"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("IsRemaster") - .HasColumnType("boolean") - .HasColumnName("is_remaster") - .HasColumnOrder(4) - .HasComment("Флаг, указывающий, что объект является частью ремастера"); + .HasColumnName("legacy_entities_id"); b.Property("LegacyEntityId") .HasColumnType("integer") - .HasColumnName("legacy_entity_id") - .HasColumnOrder(1) - .HasComment("Идентификатор устаревшей сущности"); + .HasColumnName("legacy_entity_id"); - b.Property("SourceId") + b.Property("RemasterEntitiesId") .HasColumnType("integer") - .HasColumnName("source_id") - .HasColumnOrder(2) - .HasComment("Идентификатор источника"); + .HasColumnName("remaster_entities_id"); - b.Property("Suffix") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("suffix") - .HasColumnOrder(3) - .HasComment("Номер страницы, эррата и т.д."); + b.Property("RemasterEntityId") + .HasColumnType("integer") + .HasColumnName("remaster_entity_id"); - b.HasKey("Id") - .HasName("pk_legacy_entity_sources"); + b.HasKey("LegacyId", "RemasterId") + .HasName("pk_legacy_remasters"); + + b.HasIndex("LegacyEntitiesId") + .HasDatabaseName("ix_legacy_remasters_legacy_entities_id"); b.HasIndex("LegacyEntityId") - .HasDatabaseName("ix_legacy_entity_sources_legacy_entity_id"); + .HasDatabaseName("ix_legacy_remasters_legacy_entity_id"); - b.HasIndex("SourceId") - .HasDatabaseName("ix_legacy_entity_sources_source_id"); + b.HasIndex("RemasterEntitiesId") + .HasDatabaseName("ix_legacy_remasters_remaster_entities_id"); - b.ToTable("legacy_entity_sources", (string)null); + b.HasIndex("RemasterEntityId") + .HasDatabaseName("ix_legacy_remasters_remaster_entity_id"); + + b.ToTable("legacy_remasters", (string)null); }); modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => @@ -1984,23 +1930,6 @@ namespace Pf2eModel.Migrations .HasConstraintName("fk_entity_keyword_keywords_keywords_id"); }); - modelBuilder.Entity("EntityLegacyEntity", b => - { - b.HasOne("Pf2eModel.Model.Base.Legacy.LegacyEntity", null) - .WithMany() - .HasForeignKey("LegacyEntitiesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_entity_legacy_entity_legacy_entities_legacy_entities_id"); - - b.HasOne("Pf2eModel.Model.Base.Entity", null) - .WithMany() - .HasForeignKey("RemasterEntitiesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_entity_legacy_entity_entities_remaster_entities_id"); - }); - modelBuilder.Entity("EntityTrait", b => { b.HasOne("Pf2eModel.Model.Base.Entity", null) @@ -2018,6 +1947,18 @@ namespace Pf2eModel.Migrations .HasConstraintName("fk_entity_trait_traits_traits_id"); }); + modelBuilder.Entity("Pf2eModel.Model.Base.EntityAlias", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany("Aliases") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_aliases_entities_entity_id"); + + b.Navigation("Entity"); + }); + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.KeywordAlias", b => { b.HasOne("Pf2eModel.Model.Base.Keywords.Keyword", "Keyword") @@ -2030,46 +1971,39 @@ namespace Pf2eModel.Migrations b.Navigation("Keyword"); }); - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntityExternal", b => + modelBuilder.Entity("Pf2eModel.Model.Base.LegacyRemaster", b => { - b.HasOne("Pf2eModel.Model.Base.Legacy.LegacyEntity", "LegacyEntity") - .WithMany("Externals") + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("LegacyEntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_legacy_remasters_entities_legacy_entities_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "LegacyEntity") + .WithMany() .HasForeignKey("LegacyEntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_legacy_entity_externals_legacy_entities_legacy_entity_id"); + .HasConstraintName("fk_legacy_remasters_entities_legacy_entity_id"); - b.HasOne("Pf2eModel.Model.Base.Targets.ExternalTarget", "Target") - .WithMany("LegacyEntityExternals") - .HasForeignKey("TargetId") + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("RemasterEntitiesId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_legacy_entity_externals_external_targets_target_id"); + .HasConstraintName("fk_legacy_remasters_entities_remaster_entities_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "RemasterEntity") + .WithMany() + .HasForeignKey("RemasterEntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_legacy_remasters_entities_remaster_entity_id"); b.Navigation("LegacyEntity"); - b.Navigation("Target"); - }); - - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntitySource", b => - { - b.HasOne("Pf2eModel.Model.Base.Legacy.LegacyEntity", "LegacyEntity") - .WithMany("Sources") - .HasForeignKey("LegacyEntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_legacy_entity_sources_legacy_entities_legacy_entity_id"); - - b.HasOne("Pf2eModel.Model.Base.Source.Source", "Source") - .WithMany("LegacyEntitySources") - .HasForeignKey("SourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_legacy_entity_sources_sources_source_id"); - - b.Navigation("LegacyEntity"); - - b.Navigation("Source"); + b.Navigation("RemasterEntity"); }); modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => @@ -2700,6 +2634,8 @@ namespace Pf2eModel.Migrations modelBuilder.Entity("Pf2eModel.Model.Base.Entity", b => { + b.Navigation("Aliases"); + b.Navigation("Externals"); b.Navigation("Sources"); @@ -2710,25 +2646,14 @@ namespace Pf2eModel.Migrations b.Navigation("Aliases"); }); - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntity", b => - { - b.Navigation("Externals"); - - b.Navigation("Sources"); - }); - modelBuilder.Entity("Pf2eModel.Model.Base.Source.Source", b => { b.Navigation("EntitySources"); - - b.Navigation("LegacyEntitySources"); }); modelBuilder.Entity("Pf2eModel.Model.Base.Targets.ExternalTarget", b => { b.Navigation("EntityExternals"); - - b.Navigation("LegacyEntityExternals"); }); modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => diff --git a/Pf2eModel/Migrations/20250514120355_1.cs b/Pf2eModel/Migrations/20250515054227_1.cs similarity index 94% rename from Pf2eModel/Migrations/20250514120355_1.cs rename to Pf2eModel/Migrations/20250515054227_1.cs index fefb752..3eee44b 100644 --- a/Pf2eModel/Migrations/20250514120355_1.cs +++ b/Pf2eModel/Migrations/20250515054227_1.cs @@ -101,19 +101,6 @@ namespace Pf2eModel.Migrations table.PrimaryKey("pk_keywords", x => x.id); }); - migrationBuilder.CreateTable( - name: "legacy_entities", - columns: table => new - { - id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - name = table.Column(type: "jsonb", nullable: false, comment: "Отображаемое имя") - }, - constraints: table => - { - table.PrimaryKey("pk_legacy_entities", x => x.id); - }); - migrationBuilder.CreateTable( name: "sources", columns: table => new @@ -261,6 +248,26 @@ namespace Pf2eModel.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "entity_aliases", + columns: table => new + { + id = table.Column(type: "integer", nullable: false, comment: "Идентификатор") + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + entity_id = table.Column(type: "integer", nullable: false, comment: "Связанная сущность"), + name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false, comment: "Алиас") + }, + constraints: table => + { + table.PrimaryKey("pk_entity_aliases", x => x.id); + table.ForeignKey( + name: "fk_entity_aliases_entities_entity_id", + column: x => x.entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "feats", columns: table => new @@ -304,6 +311,46 @@ namespace Pf2eModel.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "legacy_remasters", + columns: table => new + { + legacy_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор сущности"), + remaster_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор цели"), + legacy_entity_id = table.Column(type: "integer", nullable: false), + remaster_entity_id = table.Column(type: "integer", nullable: false), + legacy_entities_id = table.Column(type: "integer", nullable: false), + remaster_entities_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_legacy_remasters", x => new { x.legacy_id, x.remaster_id }); + table.ForeignKey( + name: "fk_legacy_remasters_entities_legacy_entities_id", + column: x => x.legacy_entities_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_legacy_remasters_entities_legacy_entity_id", + column: x => x.legacy_entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_legacy_remasters_entities_remaster_entities_id", + column: x => x.remaster_entities_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_legacy_remasters_entities_remaster_entity_id", + column: x => x.remaster_entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "rituals", columns: table => new @@ -477,57 +524,6 @@ namespace Pf2eModel.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.CreateTable( - name: "entity_legacy_entity", - columns: table => new - { - legacy_entities_id = table.Column(type: "integer", nullable: false), - remaster_entities_id = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("pk_entity_legacy_entity", x => new { x.legacy_entities_id, x.remaster_entities_id }); - table.ForeignKey( - name: "fk_entity_legacy_entity_entities_remaster_entities_id", - column: x => x.remaster_entities_id, - principalTable: "entities", - principalColumn: "id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "fk_entity_legacy_entity_legacy_entities_legacy_entities_id", - column: x => x.legacy_entities_id, - principalTable: "legacy_entities", - principalColumn: "id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "legacy_entity_externals", - columns: table => new - { - legacy_entity_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор сущности"), - target_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор цели"), - external_id = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), - suffix = table.Column(type: "character varying(255)", maxLength: 255, nullable: false, comment: "Часть URL до объекта. Для источников Foundry - полный UUID объекта"), - md5 = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "Контрольная сумма объекта") - }, - constraints: table => - { - table.PrimaryKey("pk_legacy_entity_externals", x => new { x.legacy_entity_id, x.target_id }); - table.ForeignKey( - name: "fk_legacy_entity_externals_external_targets_target_id", - column: x => x.target_id, - principalTable: "external_targets", - principalColumn: "id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "fk_legacy_entity_externals_legacy_entities_legacy_entity_id", - column: x => x.legacy_entity_id, - principalTable: "legacy_entities", - principalColumn: "id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "entity_sources", columns: table => new @@ -556,34 +552,6 @@ namespace Pf2eModel.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.CreateTable( - name: "legacy_entity_sources", - columns: table => new - { - id = table.Column(type: "integer", nullable: false, comment: "Идентификатор") - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - legacy_entity_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор устаревшей сущности"), - source_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор источника"), - suffix = table.Column(type: "character varying(255)", maxLength: 255, nullable: false, comment: "Номер страницы, эррата и т.д."), - is_remaster = table.Column(type: "boolean", nullable: false, comment: "Флаг, указывающий, что объект является частью ремастера") - }, - constraints: table => - { - table.PrimaryKey("pk_legacy_entity_sources", x => x.id); - table.ForeignKey( - name: "fk_legacy_entity_sources_legacy_entities_legacy_entity_id", - column: x => x.legacy_entity_id, - principalTable: "legacy_entities", - principalColumn: "id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "fk_legacy_entity_sources_sources_source_id", - column: x => x.source_id, - principalTable: "sources", - principalColumn: "id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "ancestry_boosts", columns: table => new @@ -1343,6 +1311,11 @@ namespace Pf2eModel.Migrations table: "deity_weapons", column: "deity_id"); + migrationBuilder.CreateIndex( + name: "ix_entity_aliases_entity_id", + table: "entity_aliases", + column: "entity_id"); + migrationBuilder.CreateIndex( name: "ix_entity_externals_target_id", table: "entity_externals", @@ -1353,11 +1326,6 @@ namespace Pf2eModel.Migrations table: "entity_keyword", column: "keywords_id"); - migrationBuilder.CreateIndex( - name: "ix_entity_legacy_entity_remaster_entities_id", - table: "entity_legacy_entity", - column: "remaster_entities_id"); - migrationBuilder.CreateIndex( name: "ix_entity_sources_entity_id", table: "entity_sources", @@ -1394,19 +1362,24 @@ namespace Pf2eModel.Migrations column: "entity_id"); migrationBuilder.CreateIndex( - name: "ix_legacy_entity_externals_target_id", - table: "legacy_entity_externals", - column: "target_id"); + name: "ix_legacy_remasters_legacy_entities_id", + table: "legacy_remasters", + column: "legacy_entities_id"); migrationBuilder.CreateIndex( - name: "ix_legacy_entity_sources_legacy_entity_id", - table: "legacy_entity_sources", + name: "ix_legacy_remasters_legacy_entity_id", + table: "legacy_remasters", column: "legacy_entity_id"); migrationBuilder.CreateIndex( - name: "ix_legacy_entity_sources_source_id", - table: "legacy_entity_sources", - column: "source_id"); + name: "ix_legacy_remasters_remaster_entities_id", + table: "legacy_remasters", + column: "remaster_entities_id"); + + migrationBuilder.CreateIndex( + name: "ix_legacy_remasters_remaster_entity_id", + table: "legacy_remasters", + column: "remaster_entity_id"); migrationBuilder.CreateIndex( name: "ix_ritual_checks_ritual_id", @@ -1518,15 +1491,15 @@ namespace Pf2eModel.Migrations migrationBuilder.DropTable( name: "deity_weapons"); + migrationBuilder.DropTable( + name: "entity_aliases"); + migrationBuilder.DropTable( name: "entity_externals"); migrationBuilder.DropTable( name: "entity_keyword"); - migrationBuilder.DropTable( - name: "entity_legacy_entity"); - migrationBuilder.DropTable( name: "entity_sources"); @@ -1546,10 +1519,7 @@ namespace Pf2eModel.Migrations name: "keyword_aliases"); migrationBuilder.DropTable( - name: "legacy_entity_externals"); - - migrationBuilder.DropTable( - name: "legacy_entity_sources"); + name: "legacy_remasters"); migrationBuilder.DropTable( name: "ritual_areas"); @@ -1587,6 +1557,12 @@ namespace Pf2eModel.Migrations migrationBuilder.DropTable( name: "deities"); + migrationBuilder.DropTable( + name: "external_targets"); + + migrationBuilder.DropTable( + name: "sources"); + migrationBuilder.DropTable( name: "traits"); @@ -1596,15 +1572,6 @@ namespace Pf2eModel.Migrations migrationBuilder.DropTable( name: "keywords"); - migrationBuilder.DropTable( - name: "external_targets"); - - migrationBuilder.DropTable( - name: "legacy_entities"); - - migrationBuilder.DropTable( - name: "sources"); - migrationBuilder.DropTable( name: "rituals"); diff --git a/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs b/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs index 77fe09f..a353789 100644 --- a/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs +++ b/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs @@ -83,25 +83,6 @@ namespace Pf2eModel.Migrations b.ToTable("entity_keyword", (string)null); }); - modelBuilder.Entity("EntityLegacyEntity", b => - { - b.Property("LegacyEntitiesId") - .HasColumnType("integer") - .HasColumnName("legacy_entities_id"); - - b.Property("RemasterEntitiesId") - .HasColumnType("integer") - .HasColumnName("remaster_entities_id"); - - b.HasKey("LegacyEntitiesId", "RemasterEntitiesId") - .HasName("pk_entity_legacy_entity"); - - b.HasIndex("RemasterEntitiesId") - .HasDatabaseName("ix_entity_legacy_entity_remaster_entities_id"); - - b.ToTable("entity_legacy_entity", (string)null); - }); - modelBuilder.Entity("EntityTrait", b => { b.Property("EntitiesId") @@ -191,6 +172,40 @@ namespace Pf2eModel.Migrations b.ToTable("entities", (string)null); }); + modelBuilder.Entity("Pf2eModel.Model.Base.EntityAlias", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1) + .HasComment("Идентификатор"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(2) + .HasComment("Связанная сущность"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(3) + .HasComment("Алиас"); + + b.HasKey("Id") + .HasName("pk_entity_aliases"); + + b.HasIndex("EntityId") + .HasDatabaseName("ix_entity_aliases_entity_id"); + + b.ToTable("entity_aliases", (string)null); + }); + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.Keyword", b => { b.Property("Id") @@ -256,121 +271,52 @@ namespace Pf2eModel.Migrations b.ToTable("keyword_aliases", (string)null); }); - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntity", b => + modelBuilder.Entity("Pf2eModel.Model.Base.LegacyRemaster", b => { - b.Property("Id") - .ValueGeneratedOnAdd() + b.Property("LegacyId") .HasColumnType("integer") - .HasColumnName("id") - .HasColumnOrder(1); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Name") - .IsRequired() - .HasColumnType("jsonb") - .HasColumnName("name") - .HasColumnOrder(2) - .HasComment("Отображаемое имя"); - - b.HasKey("Id") - .HasName("pk_legacy_entities"); - - b.ToTable("legacy_entities", (string)null); - }); - - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntityExternal", b => - { - b.Property("LegacyEntityId") - .HasColumnType("integer") - .HasColumnName("legacy_entity_id") + .HasColumnName("legacy_id") .HasColumnOrder(1) .HasComment("Идентификатор сущности"); - b.Property("TargetId") + b.Property("RemasterId") .HasColumnType("integer") - .HasColumnName("target_id") + .HasColumnName("remaster_id") .HasColumnOrder(2) .HasComment("Идентификатор цели"); - b.Property("ExternalId") - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("external_id") - .HasColumnOrder(3); - - b.Property("Md5") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasColumnName("md5") - .HasColumnOrder(5) - .HasComment("Контрольная сумма объекта"); - - b.Property("Suffix") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("suffix") - .HasColumnOrder(4) - .HasComment("Часть URL до объекта. Для источников Foundry - полный UUID объекта"); - - b.HasKey("LegacyEntityId", "TargetId") - .HasName("pk_legacy_entity_externals"); - - b.HasIndex("TargetId") - .HasDatabaseName("ix_legacy_entity_externals_target_id"); - - b.ToTable("legacy_entity_externals", (string)null); - }); - - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntitySource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() + b.Property("LegacyEntitiesId") .HasColumnType("integer") - .HasColumnName("id") - .HasColumnOrder(0) - .HasComment("Идентификатор"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("IsRemaster") - .HasColumnType("boolean") - .HasColumnName("is_remaster") - .HasColumnOrder(4) - .HasComment("Флаг, указывающий, что объект является частью ремастера"); + .HasColumnName("legacy_entities_id"); b.Property("LegacyEntityId") .HasColumnType("integer") - .HasColumnName("legacy_entity_id") - .HasColumnOrder(1) - .HasComment("Идентификатор устаревшей сущности"); + .HasColumnName("legacy_entity_id"); - b.Property("SourceId") + b.Property("RemasterEntitiesId") .HasColumnType("integer") - .HasColumnName("source_id") - .HasColumnOrder(2) - .HasComment("Идентификатор источника"); + .HasColumnName("remaster_entities_id"); - b.Property("Suffix") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("suffix") - .HasColumnOrder(3) - .HasComment("Номер страницы, эррата и т.д."); + b.Property("RemasterEntityId") + .HasColumnType("integer") + .HasColumnName("remaster_entity_id"); - b.HasKey("Id") - .HasName("pk_legacy_entity_sources"); + b.HasKey("LegacyId", "RemasterId") + .HasName("pk_legacy_remasters"); + + b.HasIndex("LegacyEntitiesId") + .HasDatabaseName("ix_legacy_remasters_legacy_entities_id"); b.HasIndex("LegacyEntityId") - .HasDatabaseName("ix_legacy_entity_sources_legacy_entity_id"); + .HasDatabaseName("ix_legacy_remasters_legacy_entity_id"); - b.HasIndex("SourceId") - .HasDatabaseName("ix_legacy_entity_sources_source_id"); + b.HasIndex("RemasterEntitiesId") + .HasDatabaseName("ix_legacy_remasters_remaster_entities_id"); - b.ToTable("legacy_entity_sources", (string)null); + b.HasIndex("RemasterEntityId") + .HasDatabaseName("ix_legacy_remasters_remaster_entity_id"); + + b.ToTable("legacy_remasters", (string)null); }); modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => @@ -1981,23 +1927,6 @@ namespace Pf2eModel.Migrations .HasConstraintName("fk_entity_keyword_keywords_keywords_id"); }); - modelBuilder.Entity("EntityLegacyEntity", b => - { - b.HasOne("Pf2eModel.Model.Base.Legacy.LegacyEntity", null) - .WithMany() - .HasForeignKey("LegacyEntitiesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_entity_legacy_entity_legacy_entities_legacy_entities_id"); - - b.HasOne("Pf2eModel.Model.Base.Entity", null) - .WithMany() - .HasForeignKey("RemasterEntitiesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_entity_legacy_entity_entities_remaster_entities_id"); - }); - modelBuilder.Entity("EntityTrait", b => { b.HasOne("Pf2eModel.Model.Base.Entity", null) @@ -2015,6 +1944,18 @@ namespace Pf2eModel.Migrations .HasConstraintName("fk_entity_trait_traits_traits_id"); }); + modelBuilder.Entity("Pf2eModel.Model.Base.EntityAlias", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany("Aliases") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_aliases_entities_entity_id"); + + b.Navigation("Entity"); + }); + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.KeywordAlias", b => { b.HasOne("Pf2eModel.Model.Base.Keywords.Keyword", "Keyword") @@ -2027,46 +1968,39 @@ namespace Pf2eModel.Migrations b.Navigation("Keyword"); }); - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntityExternal", b => + modelBuilder.Entity("Pf2eModel.Model.Base.LegacyRemaster", b => { - b.HasOne("Pf2eModel.Model.Base.Legacy.LegacyEntity", "LegacyEntity") - .WithMany("Externals") + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("LegacyEntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_legacy_remasters_entities_legacy_entities_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "LegacyEntity") + .WithMany() .HasForeignKey("LegacyEntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_legacy_entity_externals_legacy_entities_legacy_entity_id"); + .HasConstraintName("fk_legacy_remasters_entities_legacy_entity_id"); - b.HasOne("Pf2eModel.Model.Base.Targets.ExternalTarget", "Target") - .WithMany("LegacyEntityExternals") - .HasForeignKey("TargetId") + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("RemasterEntitiesId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_legacy_entity_externals_external_targets_target_id"); + .HasConstraintName("fk_legacy_remasters_entities_remaster_entities_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "RemasterEntity") + .WithMany() + .HasForeignKey("RemasterEntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_legacy_remasters_entities_remaster_entity_id"); b.Navigation("LegacyEntity"); - b.Navigation("Target"); - }); - - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntitySource", b => - { - b.HasOne("Pf2eModel.Model.Base.Legacy.LegacyEntity", "LegacyEntity") - .WithMany("Sources") - .HasForeignKey("LegacyEntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_legacy_entity_sources_legacy_entities_legacy_entity_id"); - - b.HasOne("Pf2eModel.Model.Base.Source.Source", "Source") - .WithMany("LegacyEntitySources") - .HasForeignKey("SourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_legacy_entity_sources_sources_source_id"); - - b.Navigation("LegacyEntity"); - - b.Navigation("Source"); + b.Navigation("RemasterEntity"); }); modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => @@ -2697,6 +2631,8 @@ namespace Pf2eModel.Migrations modelBuilder.Entity("Pf2eModel.Model.Base.Entity", b => { + b.Navigation("Aliases"); + b.Navigation("Externals"); b.Navigation("Sources"); @@ -2707,25 +2643,14 @@ namespace Pf2eModel.Migrations b.Navigation("Aliases"); }); - modelBuilder.Entity("Pf2eModel.Model.Base.Legacy.LegacyEntity", b => - { - b.Navigation("Externals"); - - b.Navigation("Sources"); - }); - modelBuilder.Entity("Pf2eModel.Model.Base.Source.Source", b => { b.Navigation("EntitySources"); - - b.Navigation("LegacyEntitySources"); }); modelBuilder.Entity("Pf2eModel.Model.Base.Targets.ExternalTarget", b => { b.Navigation("EntityExternals"); - - b.Navigation("LegacyEntityExternals"); }); modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => diff --git a/Pf2eModel/Model/Base/Entity.cs b/Pf2eModel/Model/Base/Entity.cs index ecc28fc..823839c 100644 --- a/Pf2eModel/Model/Base/Entity.cs +++ b/Pf2eModel/Model/Base/Entity.cs @@ -2,7 +2,6 @@ using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; using Pf2eModel.Model.Base.Keywords; -using Pf2eModel.Model.Base.Legacy; using Pf2eModel.Model.Base.Source; using Pf2eModel.Model.Base.Targets; using Pf2eModel.Model.Common.I18n; @@ -81,6 +80,11 @@ public class Entity [Comment("Флаг, указывающий, что сущность был проверен и не требует автоматической перезаписи")] public bool? IsChecked { get; set; } = false; + /// + /// Коллекция алиасов + /// + public ICollection Aliases { get; set; } = []; + /// /// Коллекция признаков, связанных с сущностью. /// @@ -104,5 +108,10 @@ public class Entity /// /// Коллекция устаревших сущностей. /// - public ICollection LegacyEntities { get; set; } = []; + public ICollection LegacyEntities { get; set; } = []; + + /// + /// Коллекция обновлённых сущностей. + /// + public ICollection RemasterEntities { get; set; } = []; } diff --git a/Pf2eModel/Model/Base/EntityAlias.cs b/Pf2eModel/Model/Base/EntityAlias.cs new file mode 100644 index 0000000..b91132f --- /dev/null +++ b/Pf2eModel/Model/Base/EntityAlias.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; + +namespace Pf2eModel.Model.Base; + +public class EntityAlias +{ + /// + /// Идентификатор источника. + /// + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column(Order = 1)] + [Comment("Идентификатор")] + public int Id { get; set; } + + /// + /// Идентификатор связанной сущности. + /// + [Column(Order = 2)] + [Comment("Связанная сущность")] + public int EntityId { get; set; } + + /// + /// Отображаемое имя источника. + /// + [Column(Order = 3)] + [MaxLength(Pf2eDbContext.NameLength)] + [Comment("Алиас")] + public string Name { get; set; } = null!; + + /// + /// Связанная + /// + public Entity Entity { get; set; } = null!; +} diff --git a/Pf2eModel/Model/Base/Legacy/LegacyEntity.cs b/Pf2eModel/Model/Base/Legacy/LegacyEntity.cs deleted file mode 100644 index af1251a..0000000 --- a/Pf2eModel/Model/Base/Legacy/LegacyEntity.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; -using Pf2eModel.Model.Common.I18n; - -namespace Pf2eModel.Model.Base.Legacy; - -/// -/// Информация об устаревшей сущности -/// -public class LegacyEntity -{ - /// - /// Идентификатор сущности. - /// - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - [Column(Order = 1)] - public int Id { get; set; } - - /// - /// Отображаемое имя сущности. - /// - [Column(Order = 2)] - [Comment("Отображаемое имя")] - public LocaleString Name { get; set; } = []; - - /// - /// Коллекция обновлённых сущностей. - /// - public ICollection RemasterEntities { get; set; } = []; - - /// - /// Коллекция источников, связанных с сущностью. - /// - public ICollection Sources { get; set; } = []; - - /// - /// Коллекция внешних ссылок, связанных с сущностью. - /// - public ICollection Externals { get; set; } = []; -} diff --git a/Pf2eModel/Model/Base/Legacy/LegacyEntityExternal.cs b/Pf2eModel/Model/Base/Legacy/LegacyEntityExternal.cs deleted file mode 100644 index 962635d..0000000 --- a/Pf2eModel/Model/Base/Legacy/LegacyEntityExternal.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; -using Pf2eModel.Model.Base.Targets; - -namespace Pf2eModel.Model.Base.Legacy; - -/// -/// Внешняя ссылка сущности. -/// -[PrimaryKey(nameof(LegacyEntityId), nameof(TargetId))] -public class LegacyEntityExternal -{ - /// - /// Идентификатор сущности. - /// - [Column(Order = 1)] - [Comment("Идентификатор сущности")] - public int LegacyEntityId { get; set; } - - /// - /// Идентификатор цели. - /// - [Column(Order = 2)] - [Comment("Идентификатор цели")] - public int TargetId { get; set; } - - [Column(Order = 3)] - [MaxLength(255)] - public string? ExternalId { get; set; } = null; - - /// - /// Конечная часть URL внешней ссылки. - /// Для источников Foundry - полный UUID объекта. - /// - [Column(Order = 4)] - [MaxLength(255)] - [Comment("Часть URL до объекта. Для источников Foundry - полный UUID объекта")] - public string Suffix { get; set; } = ""; - - /// - /// Контрольная сумма объекта. - /// - [Column(Order = 5)] - [MaxLength(32)] - [Comment("Контрольная сумма объекта")] - public string Md5 { get; set; } = null!; - - /// - /// Сущность, которая ссылается на внешнюю ссылку. - /// - public LegacyEntity LegacyEntity { get; set; } = null!; - - /// - /// Цель внешней ссылки. - /// - public ExternalTarget Target { get; set; } = null!; -} diff --git a/Pf2eModel/Model/Base/Legacy/LegacyEntitySource.cs b/Pf2eModel/Model/Base/Legacy/LegacyEntitySource.cs deleted file mode 100644 index a3d959d..0000000 --- a/Pf2eModel/Model/Base/Legacy/LegacyEntitySource.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Pf2eModel.Model.Base.Legacy; - -/// -/// Связь между сущностью и источником. -/// -public class LegacyEntitySource -{ - /// - /// Идентификатор связи. - /// - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - [Column(Order = 0)] - [Comment("Идентификатор")] - public int Id { get; set; } - - /// - /// Идентификатор устаревшей сущности. - /// - [Column(Order = 1)] - [Comment("Идентификатор устаревшей сущности")] - public int LegacyEntityId { get; set; } - - /// - /// Идентификатор источника. - /// - [Column(Order = 2)] - [Comment("Идентификатор источника")] - public int SourceId { get; set; } - - /// - /// Дополнительная информация о источнике, например, номер страницы, номер тома и т.д. - /// - [Column(Order = 3)] - [MaxLength(255)] - [Comment("Номер страницы, эррата и т.д.")] - public string Suffix { get; set; } = null!; - - /// - /// Флаг, указывающий, что объект является частью ремастера. - /// - [Column(Order = 4)] - [Comment("Флаг, указывающий, что объект является частью ремастера")] - public bool IsRemaster { get; set; } - - /// - /// Сущность, к которой относится источник. - /// - public LegacyEntity LegacyEntity { get; set; } = null!; - - /// - /// Источник, к которому относится сущность. - /// - public Source.Source Source { get; set; } = null!; -} diff --git a/Pf2eModel/Model/Base/LegacyRemaster.cs b/Pf2eModel/Model/Base/LegacyRemaster.cs new file mode 100644 index 0000000..c41db87 --- /dev/null +++ b/Pf2eModel/Model/Base/LegacyRemaster.cs @@ -0,0 +1,35 @@ +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; + +namespace Pf2eModel.Model.Base; + +/// +/// Связь устаревших и обновлённых сущностей +/// +[PrimaryKey(nameof(LegacyId), nameof(RemasterId))] +public class LegacyRemaster +{ + /// + /// Идентификатор устаревшей сущности. + /// + [Column(Order = 1)] + [Comment("Идентификатор сущности")] + public int LegacyId { get; set; } + + /// + /// Идентификатор обновлённой сущности. + /// + [Column(Order = 2)] + [Comment("Идентификатор цели")] + public int RemasterId { get; set; } + + /// + /// Устаревшая сущность. + /// + public Entity LegacyEntity { get; set; } = null!; + + /// + /// Обновлённая сущность. + /// + public Entity RemasterEntity { get; set; } = null!; +} diff --git a/Pf2eModel/Model/Base/Source/Source.cs b/Pf2eModel/Model/Base/Source/Source.cs index 6a88179..7f098f1 100644 --- a/Pf2eModel/Model/Base/Source/Source.cs +++ b/Pf2eModel/Model/Base/Source/Source.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; -using Pf2eModel.Model.Base.Legacy; using Pf2eModel.Model.Enum; namespace Pf2eModel.Model.Base.Source; @@ -46,9 +45,4 @@ public class Source /// Связанные сущности. /// public ICollection EntitySources { get; set; } = []; - - /// - /// Связанные сущности. - /// - public ICollection LegacyEntitySources { get; set; } = []; } diff --git a/Pf2eModel/Model/Base/Targets/ExternalTarget.cs b/Pf2eModel/Model/Base/Targets/ExternalTarget.cs index 6602b5b..44b74bb 100644 --- a/Pf2eModel/Model/Base/Targets/ExternalTarget.cs +++ b/Pf2eModel/Model/Base/Targets/ExternalTarget.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; -using Pf2eModel.Model.Base.Legacy; namespace Pf2eModel.Model.Base.Targets; @@ -47,9 +46,4 @@ public class ExternalTarget /// Коллекция сущностей, которые ссылаются на эту цель. /// public ICollection EntityExternals { get; set; } = []; - - /// - /// Коллекция устаревших сущностей, которые ссылаются на эту цель. - /// - public ICollection LegacyEntityExternals { get; set; } = []; } diff --git a/Pf2eModel/Pf2eDbContext.cs b/Pf2eModel/Pf2eDbContext.cs index 0d49ace..2adc7be 100644 --- a/Pf2eModel/Pf2eDbContext.cs +++ b/Pf2eModel/Pf2eDbContext.cs @@ -3,7 +3,6 @@ using dotenv.net.Utilities; using Microsoft.EntityFrameworkCore; using Pf2eModel.Model.Base; using Pf2eModel.Model.Base.Keywords; -using Pf2eModel.Model.Base.Legacy; using Pf2eModel.Model.Base.Source; using Pf2eModel.Model.Base.Targets; using Pf2eModel.Model.Common; @@ -78,6 +77,8 @@ public partial class Pf2eDbContext : DbContext public virtual DbSet Entities { get; set; } + public virtual DbSet EntityAliases { get; set; } + public virtual DbSet EntityExternals { get; set; } public virtual DbSet EntitySources { get; set; } @@ -98,11 +99,7 @@ public partial class Pf2eDbContext : DbContext public virtual DbSet Languages { get; set; } - public virtual DbSet LegacyEntities { get; set; } - - public virtual DbSet LegacyEntityExternals { get; set; } - - public virtual DbSet LegacyEntitySources { get; set; } + public virtual DbSet LegacyRemasters { get; set; } public virtual DbSet Rituals { get; set; } diff --git a/Pf2eModel/Pf2eDbContextModel.cs b/Pf2eModel/Pf2eDbContextModel.cs index 0d53019..1905681 100644 --- a/Pf2eModel/Pf2eDbContextModel.cs +++ b/Pf2eModel/Pf2eDbContextModel.cs @@ -6,7 +6,6 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using Pf2eModel.Model; using Pf2eModel.Model.Base; using Pf2eModel.Model.Base.Keywords; -using Pf2eModel.Model.Base.Legacy; using Pf2eModel.Model.Base.Source; using Pf2eModel.Model.Base.Targets; using Pf2eModel.Model.Common; @@ -98,6 +97,13 @@ public partial class Pf2eDbContext entity.HasMany(e => e.Keywords).WithMany(t => t.Entities); + // EntityAliases + entity + .HasMany(e => e.Aliases) + .WithOne(a => a.Entity) + .HasForeignKey(a => a.EntityId) + .OnDelete(DeleteBehavior.Cascade); + // EntitySource entity .HasMany(e => e.Sources) @@ -111,28 +117,19 @@ public partial class Pf2eDbContext .WithOne(e => e.Entity) .HasForeignKey(e => e.EntityId) .OnDelete(DeleteBehavior.Cascade); - }); - // LegacyEntity - modelBuilder.Entity(entity => - { - BindLocaleString(entity, l => l.Name); - - entity.HasMany(l => l.RemasterEntities).WithMany(e => e.LegacyEntities); - - // LegacyEntitySource + // LegacyRemaster entity - .HasMany(e => e.Sources) - .WithOne(e => e.LegacyEntity) - .HasForeignKey(e => e.LegacyEntityId) - .OnDelete(DeleteBehavior.Cascade); - - // LegacyEntityExternal - entity - .HasMany(e => e.Externals) - .WithOne(e => e.LegacyEntity) - .HasForeignKey(e => e.LegacyEntityId) - .OnDelete(DeleteBehavior.Cascade); + .HasMany(e => e.LegacyEntities) + .WithMany(e => e.RemasterEntities) + .UsingEntity( + //l => + // l.HasOne(lr => lr.LegacyEntity).WithMany().HasForeignKey(lr => lr.LegacyId), + //r => + // r.HasOne(lr => lr.RemasterEntity) + // .WithMany() + // .HasForeignKey(lr => lr.RemasterId) + ); }); // Source @@ -146,12 +143,6 @@ public partial class Pf2eDbContext .HasForeignKey(e => e.SourceId) .OnDelete(DeleteBehavior.Cascade); - entity - .HasMany(s => s.LegacyEntitySources) - .WithOne(e => e.Source) - .HasForeignKey(e => e.SourceId) - .OnDelete(DeleteBehavior.Cascade); - // + EntitySource }); modelBuilder.Entity(entity => { }); @@ -164,12 +155,6 @@ public partial class Pf2eDbContext .WithOne(e => e.Target) .HasForeignKey(e => e.TargetId) .OnDelete(DeleteBehavior.Cascade); - - entity - .HasMany(t => t.LegacyEntityExternals) - .WithOne(e => e.Target) - .HasForeignKey(e => e.TargetId) - .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { });