From e54d1718352cb77217173065790742bcf8e29671 Mon Sep 17 00:00:00 2001 From: kozhilya Date: Fri, 18 Apr 2025 12:32:24 +0400 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= =?UTF-8?q?=20=D0=91=D0=94=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D1=82=D1=83=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Migrations/20250418083111_1.Designer.cs | 2054 +++++++++++++++++ Pf2eModel/Migrations/20250418083111_1.cs | 1199 ++++++++++ .../Migrations/Pf2eDbContextModelSnapshot.cs | 2051 ++++++++++++++++ Pf2eModel/{Model => }/Pf2eDbContext.cs | 5 +- Pf2eModel/{Model => }/Pf2eDbContextModel.cs | 0 Pf2eModel/Pf2eModel.csproj | 23 +- 6 files changed, 5321 insertions(+), 11 deletions(-) create mode 100644 Pf2eModel/Migrations/20250418083111_1.Designer.cs create mode 100644 Pf2eModel/Migrations/20250418083111_1.cs create mode 100644 Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs rename Pf2eModel/{Model => }/Pf2eDbContext.cs (95%) rename Pf2eModel/{Model => }/Pf2eDbContextModel.cs (100%) diff --git a/Pf2eModel/Migrations/20250418083111_1.Designer.cs b/Pf2eModel/Migrations/20250418083111_1.Designer.cs new file mode 100644 index 0000000..6ee5aaa --- /dev/null +++ b/Pf2eModel/Migrations/20250418083111_1.Designer.cs @@ -0,0 +1,2054 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Pf2eModel.Model; +using Pf2eModel.Model.Enum; + +#nullable disable + +namespace Pf2eModel.Migrations +{ + [DbContext(typeof(Pf2eDbContext))] + [Migration("20250418083111_1")] + partial class _1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_category", new[] { "unknown", "offensive", "defensive", "interaction", "familiar", "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_type", new[] { "none", "1_action", "2_actions", "3_actions", "1-3_actions", "1-2_actions" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "legacy", "english", "legacy_english", "hobby", "other" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "ancestry_vision", new[] { "normal", "low-light-vision", "darkvision" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "attribute_values", new[] { "any", "str", "dex", "con", "int", "wis", "cha" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "class_progression_type", new[] { "entity", "ancestry_feat", "class_feat", "general_feat", "skill_feat", "skill_increase" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "condition_group", new[] { "unknown", "senses", "abilities", "death", "attitudes", "detection" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_category", new[] { "deity", "pantheon", "covenant", "philosophy" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_fonts", new[] { "none", "heal", "harm", "any" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_sanctification", new[] { "holy", "unholy", "any" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_rarity", new[] { "common", "uncommon", "rare", "unique" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_type", new[] { "unknown", "trait", "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_action_type", new[] { "passive", "action", "reaction", "free" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon", "campaign_feature" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "size", new[] { "med", "tiny" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "source_category", new[] { "rulebook", "adventure-path", "lost-omens", "adventures", "comics", "blog-posts", "society" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "spell_area_type", new[] { "burst", "emanation", "cone", "line", "square", "cube", "cylinder" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "spell_damage_category", new[] { "persistent", "splash" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "spell_damage_kinds", new[] { "damage", "healing", "any" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "training_stage", new[] { "untrained", "trained", "expert", "master", "legendary" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "trait_type", new[] { "regular", "tradition" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("DeityTraining", b => + { + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id"); + + b.Property("SkillsId") + .HasColumnType("integer") + .HasColumnName("skills_id"); + + b.HasKey("DeityId", "SkillsId") + .HasName("pk_deity_training"); + + b.HasIndex("SkillsId") + .HasDatabaseName("ix_deity_training_skills_id"); + + b.ToTable("deity_training", (string)null); + }); + + modelBuilder.Entity("EntityKeyword", b => + { + b.Property("EntitiesId") + .HasColumnType("integer") + .HasColumnName("entities_id"); + + b.Property("KeywordsId") + .HasColumnType("integer") + .HasColumnName("keywords_id"); + + b.HasKey("EntitiesId", "KeywordsId") + .HasName("pk_entity_keyword"); + + b.HasIndex("KeywordsId") + .HasDatabaseName("ix_entity_keyword_keywords_id"); + + b.ToTable("entity_keyword", (string)null); + }); + + modelBuilder.Entity("EntityTrait", b => + { + b.Property("EntitiesId") + .HasColumnType("integer") + .HasColumnName("entities_id"); + + b.Property("TraitsId") + .HasColumnType("integer") + .HasColumnName("traits_id"); + + b.HasKey("EntitiesId", "TraitsId") + .HasName("pk_entity_trait"); + + b.HasIndex("TraitsId") + .HasDatabaseName("ix_entity_trait_traits_id"); + + b.ToTable("entity_trait", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Entity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("text") + .HasColumnName("description") + .HasColumnOrder(6) + .HasComment("Текстовое описание объекта"); + + b.Property("Img") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("img") + .HasColumnOrder(5) + .HasComment("Изображение объекта"); + + b.Property("IsChecked") + .HasColumnType("boolean") + .HasColumnName("is_checked") + .HasColumnOrder(9) + .HasComment("Флаг, указывающий, что объект был проверен и не требует автоматической перезаписи"); + + b.Property("IsTranslated") + .HasColumnType("boolean") + .HasColumnName("is_translated") + .HasColumnOrder(8) + .HasComment("Флаг, указывающий, что у объекта существует перевод"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2) + .HasComment("Отображаемое имя"); + + b.Property("Rarity") + .HasColumnType("entity_rarity") + .HasColumnName("rarity") + .HasColumnOrder(7); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("slug") + .HasColumnOrder(4) + .HasComment("Часть имени в URL"); + + b.Property("Type") + .HasColumnType("entity_type") + .HasColumnName("type") + .HasColumnOrder(3) + .HasComment("Тип объекта"); + + b.HasKey("Id") + .HasName("pk_entities"); + + b.ToTable("entities", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.EntityAlias", b => + { + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(1); + + b.Property("Type") + .HasColumnType("alias_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.Property("Alias") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("alias") + .HasColumnOrder(3); + + b.HasKey("EntityId", "Type") + .HasName("pk_entity_aliases"); + + b.ToTable("entity_aliases", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.Keyword", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_keywords"); + + b.ToTable("keywords", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.KeywordAlias", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("KeywordId") + .HasColumnType("integer") + .HasColumnName("keyword_id") + .HasColumnOrder(2); + + b.Property("Value") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("value") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_keyword_aliases"); + + b.HasIndex("KeywordId") + .HasDatabaseName("ix_keyword_aliases_keyword_id"); + + b.ToTable("keyword_aliases", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => + { + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(1); + + b.Property("SourceId") + .HasColumnType("integer") + .HasColumnName("source_id") + .HasColumnOrder(2); + + b.Property("IsRemaster") + .HasColumnType("boolean") + .HasColumnName("is_remaster") + .HasColumnOrder(4) + .HasComment("Флаг, указывающий, что объект является частью ремастера"); + + b.Property("Suffix") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("suffix") + .HasColumnOrder(3) + .HasComment("Номер страницы, эррата и т.д."); + + b.HasKey("EntityId", "SourceId") + .HasName("pk_entity_sources"); + + b.HasIndex("SourceId") + .HasDatabaseName("ix_entity_sources_source_id"); + + b.ToTable("entity_sources", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.Source", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Category") + .HasColumnType("source_category") + .HasColumnName("category") + .HasColumnOrder(3); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("ReleaseDate") + .HasColumnType("date") + .HasColumnName("release_date") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_sources"); + + b.ToTable("sources", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.EntityExternal", b => + { + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(0); + + b.Property("TargetId") + .HasColumnType("integer") + .HasColumnName("target_id") + .HasColumnOrder(1); + + b.Property("Md5") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("md5") + .HasColumnOrder(3) + .HasComment("Контроль версии объекта"); + + b.Property("Suffix") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("suffix") + .HasColumnOrder(2) + .HasComment("Часть URL до объекта. Для источников Foundry - полный UUID объекта"); + + b.HasKey("EntityId", "TargetId") + .HasName("pk_entity_externals"); + + b.HasIndex("TargetId") + .HasDatabaseName("ix_entity_externals_target_id"); + + b.ToTable("entity_externals", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.ExternalTarget", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("icon") + .HasColumnOrder(3); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("Prefix") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("prefix") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_external_targets"); + + b.ToTable("external_targets", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Common.Frequency", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Max") + .HasColumnType("integer") + .HasColumnName("max") + .HasColumnOrder(2); + + b.Property("Per") + .HasColumnType("integer") + .HasColumnName("per") + .HasColumnOrder(3); + + b.Property("Value") + .HasColumnType("integer") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_frequencies"); + + b.ToTable("frequencies", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Common.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("Rarity") + .HasColumnType("entity_rarity") + .HasColumnName("rarity") + .HasColumnOrder(4); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("slug") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_languages"); + + b.ToTable("languages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Common.Training", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("key") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_trainings"); + + b.ToTable("trainings", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Action", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Actions") + .HasColumnType("integer") + .HasColumnName("actions") + .HasColumnOrder(3); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(6); + + b.Property("IsFreeAction") + .HasColumnType("boolean") + .HasColumnName("is_free_action") + .HasColumnOrder(6); + + b.Property("IsPassive") + .HasColumnType("boolean") + .HasColumnName("is_passive") + .HasColumnOrder(6); + + b.Property("IsReaction") + .HasColumnType("boolean") + .HasColumnName("is_reaction") + .HasColumnOrder(5); + + b.Property("MaxActions") + .HasColumnType("integer") + .HasColumnName("max_actions") + .HasColumnOrder(4); + + b.Property("Type") + .HasColumnType("action_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_actions"); + + b.ToTable("actions", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Hp") + .HasColumnType("integer") + .HasColumnName("hp") + .HasColumnOrder(3); + + b.Property("Reach") + .HasColumnType("integer") + .HasColumnName("reach") + .HasColumnOrder(4); + + b.Property("Size") + .HasColumnType("size") + .HasColumnName("size") + .HasColumnOrder(2); + + b.Property("Speed") + .HasColumnType("integer") + .HasColumnName("speed") + .HasColumnOrder(5); + + b.Property("Vision") + .HasColumnType("ancestry_vision") + .HasColumnName("vision") + .HasColumnOrder(6); + + b.HasKey("Id") + .HasName("pk_ancestries"); + + b.ToTable("ancestries", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryBoost", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(2); + + b.Property("Boost") + .HasColumnType("boolean") + .HasColumnName("boost") + .HasColumnOrder(3); + + b.Property("Value") + .HasColumnType("attribute_values") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_ancestry_boosts"); + + b.HasIndex("AncestryId") + .HasDatabaseName("ix_ancestry_boosts_ancestry_id"); + + b.ToTable("ancestry_boosts", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryItem", b => + { + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(1); + + b.Property("ItemId") + .HasColumnType("integer") + .HasColumnName("item_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(3); + + b.HasKey("AncestryId", "ItemId") + .HasName("pk_ancestry_items"); + + b.HasIndex("ItemId") + .HasDatabaseName("ix_ancestry_items_item_id"); + + b.ToTable("ancestry_items", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryLanguage", b => + { + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(1); + + b.Property("LanguageId") + .HasColumnType("integer") + .HasColumnName("language_id") + .HasColumnOrder(2); + + b.Property("IsAdditional") + .HasColumnType("boolean") + .HasColumnName("is_additional") + .HasColumnOrder(3); + + b.HasKey("AncestryId", "LanguageId") + .HasName("pk_ancestry_languages"); + + b.HasIndex("LanguageId") + .HasDatabaseName("ix_ancestry_languages_language_id"); + + b.ToTable("ancestry_languages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.HasKey("Id") + .HasName("pk_backgrounds"); + + b.ToTable("backgrounds", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Attribute") + .HasColumnType("attribute_values") + .HasColumnName("attribute") + .HasColumnOrder(3); + + b.Property("BackgroundId") + .HasColumnType("integer") + .HasColumnName("background_id") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_background_boosts"); + + b.HasIndex("BackgroundId") + .HasDatabaseName("ix_background_boosts_background_id"); + + b.ToTable("background_boosts", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundItem", b => + { + b.Property("BackgroundId") + .HasColumnType("integer") + .HasColumnName("background_id") + .HasColumnOrder(1); + + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(3); + + b.HasKey("BackgroundId", "EntityId") + .HasName("pk_background_items"); + + b.HasIndex("EntityId") + .HasDatabaseName("ix_background_items_entity_id"); + + b.ToTable("background_items", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundTraining", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("BackgroundId") + .HasColumnType("integer") + .HasColumnName("background_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("training_stage") + .HasColumnName("level") + .HasColumnOrder(4); + + b.Property("TrainingId") + .HasColumnType("integer") + .HasColumnName("training_id") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_background_skills"); + + b.HasIndex("BackgroundId") + .HasDatabaseName("ix_background_skills_background_id"); + + b.HasIndex("TrainingId") + .HasDatabaseName("ix_background_skills_training_id"); + + b.ToTable("background_skills", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Class", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("AdditionalTrainedSkills") + .HasColumnType("integer") + .HasColumnName("additional_trained_skills") + .HasColumnOrder(6); + + b.Property("Hp") + .HasColumnType("integer") + .HasColumnName("hp") + .HasColumnOrder(3); + + b.Property("Perception") + .HasColumnType("integer") + .HasColumnName("perception") + .HasColumnOrder(4); + + b.Property("Spellcasting") + .HasColumnType("boolean") + .HasColumnName("spellcasting") + .HasColumnOrder(5); + + b.HasKey("Id") + .HasName("pk_classes"); + + b.ToTable("classes", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAbility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClassId") + .HasColumnType("integer") + .HasColumnName("class_id") + .HasColumnOrder(2); + + b.Property("Value") + .HasColumnType("attribute_values") + .HasColumnName("value") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_class_key_abilities"); + + b.HasIndex("ClassId") + .HasDatabaseName("ix_class_key_abilities_class_id"); + + b.ToTable("class_key_abilities", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassProgression", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClassId") + .HasColumnType("integer") + .HasColumnName("class_id") + .HasColumnOrder(2); + + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(5); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(31); + + b.Property("Type") + .HasColumnType("class_progression_type") + .HasColumnName("type") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_class_progressions"); + + b.HasIndex("ClassId") + .HasDatabaseName("ix_class_progressions_class_id"); + + b.HasIndex("EntityId") + .HasDatabaseName("ix_class_progressions_entity_id"); + + b.ToTable("class_progressions", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassTraining", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClassId") + .HasColumnType("integer") + .HasColumnName("class_id") + .HasColumnOrder(2); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(4); + + b.Property("Stage") + .HasColumnType("integer") + .HasColumnName("stage") + .HasColumnOrder(5); + + b.Property("TrainingId") + .HasColumnType("integer") + .HasColumnName("training_id") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_class_trainings"); + + b.HasIndex("ClassId") + .HasDatabaseName("ix_class_trainings_class_id"); + + b.HasIndex("TrainingId") + .HasDatabaseName("ix_class_trainings_training_id"); + + b.ToTable("class_trainings", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Condition", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(3); + + b.Property("Group") + .HasColumnType("condition_group") + .HasColumnName("group") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_conditions"); + + b.ToTable("conditions", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Deity", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Category") + .HasColumnType("deity_category") + .HasColumnName("category") + .HasColumnOrder(2); + + b.Property("Fonts") + .HasColumnType("deity_fonts") + .HasColumnName("fonts") + .HasColumnOrder(3); + + b.Property("Sanctification") + .HasColumnType("deity_sanctification") + .HasColumnName("sanctification") + .HasColumnOrder(4); + + b.Property("SanctificationMust") + .HasColumnType("boolean") + .HasColumnName("sanctification_must") + .HasColumnOrder(5); + + b.HasKey("Id") + .HasName("pk_deities"); + + b.ToTable("deities", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityAttribute", b => + { + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(1); + + b.Property("Attribute") + .HasColumnType("attribute_values") + .HasColumnName("attribute") + .HasColumnOrder(2); + + b.HasKey("DeityId", "Attribute") + .HasName("pk_deity_attributes"); + + b.ToTable("deity_attributes", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityDomain", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(2); + + b.Property("IsPrimary") + .HasColumnType("boolean") + .HasColumnName("is_primary") + .HasColumnOrder(3); + + b.Property("Value") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_deity_domains"); + + b.HasIndex("DeityId") + .HasDatabaseName("ix_deity_domains_deity_id"); + + b.ToTable("deity_domains", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeitySpell", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(3); + + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_deity_spells"); + + b.HasIndex("DeityId") + .HasDatabaseName("ix_deity_spells_deity_id"); + + b.HasIndex("SpellId") + .HasDatabaseName("ix_deity_spells_spell_id"); + + b.ToTable("deity_spells", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(2); + + b.Property("Weapon") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("weapon") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_deity_weapons"); + + b.HasIndex("DeityId") + .HasDatabaseName("ix_deity_weapons_deity_id"); + + b.ToTable("deity_weapons", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Actions") + .HasColumnType("integer") + .HasColumnName("actions") + .HasColumnOrder(4); + + b.Property("Category") + .HasColumnType("action_category") + .HasColumnName("category") + .HasColumnOrder(3); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(10); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(5); + + b.Property("LevelTaken") + .HasColumnType("integer") + .HasColumnName("level_taken") + .HasColumnOrder(6); + + b.Property("Location") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("location") + .HasColumnOrder(8); + + b.Property("MaxTakable") + .HasColumnType("integer") + .HasColumnName("max_takable") + .HasColumnOrder(7); + + b.Property("OnlyLevel1") + .HasColumnType("boolean") + .HasColumnName("only_level1") + .HasColumnOrder(9); + + b.Property("Type") + .HasColumnType("action_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_feats"); + + b.ToTable("feats", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.FeatRelation.FeatPrerequisite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FeatId") + .HasColumnType("integer") + .HasColumnName("feat_id") + .HasColumnOrder(2); + + b.Property("Value") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("value") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_feat_prerequisites"); + + b.HasIndex("FeatId") + .HasDatabaseName("ix_feat_prerequisites_feat_id"); + + b.ToTable("feat_prerequisites", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Heritage", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_heritages"); + + b.HasIndex("AncestryId") + .HasDatabaseName("ix_heritages_ancestry_id"); + + b.ToTable("heritages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Spell", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("CanHeightening") + .HasColumnType("boolean") + .HasColumnName("can_heightening") + .HasColumnOrder(11); + + b.Property("Cost") + .HasColumnType("integer") + .HasColumnName("cost") + .HasColumnOrder(3); + + b.Property("Counteraction") + .HasColumnType("boolean") + .HasColumnName("counteraction") + .HasColumnOrder(4); + + b.Property("Duration") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("duration") + .HasColumnOrder(6); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(2); + + b.Property("Range") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("range") + .HasColumnOrder(7); + + b.Property("Requirements") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("requirements") + .HasColumnOrder(8); + + b.Property("Sustained") + .HasColumnType("boolean") + .HasColumnName("sustained") + .HasColumnOrder(5); + + b.Property("Target") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("target") + .HasColumnOrder(9); + + b.Property("Time") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("time") + .HasColumnOrder(10); + + b.HasKey("Id") + .HasName("pk_spells"); + + b.ToTable("spells", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellArea", b => + { + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(1); + + b.Property("Details") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("details") + .HasColumnOrder(2); + + b.Property("Type") + .HasColumnType("spell_area_type") + .HasColumnName("type") + .HasColumnOrder(3); + + b.Property("Value") + .HasColumnType("integer") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("SpellId") + .HasName("pk_spell_areas"); + + b.ToTable("spell_areas", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDamage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApplyMod") + .HasColumnType("boolean") + .HasColumnName("apply_mod") + .HasColumnOrder(4); + + b.Property("Category") + .HasColumnType("spell_damage_category") + .HasColumnName("category") + .HasColumnOrder(5); + + b.Property("Formula") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("formula") + .HasColumnOrder(6); + + b.Property("Key") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("key") + .HasColumnOrder(3); + + b.Property("Kinds") + .HasColumnType("spell_damage_kinds") + .HasColumnName("kinds") + .HasColumnOrder(7); + + b.Property("Materials") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("materials") + .HasColumnOrder(8); + + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(2); + + b.Property("Type") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("type") + .HasColumnOrder(9); + + b.HasKey("Id") + .HasName("pk_spell_damages"); + + b.HasIndex("SpellId") + .HasDatabaseName("ix_spell_damages_spell_id"); + + b.ToTable("spell_damages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDefense", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsBasic") + .HasColumnType("boolean") + .HasColumnName("is_basic") + .HasColumnOrder(4); + + b.Property("IsPassive") + .HasColumnType("boolean") + .HasColumnName("is_passive") + .HasColumnOrder(3); + + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(2); + + b.Property("Statistic") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("statistic") + .HasColumnOrder(5); + + b.HasKey("Id") + .HasName("pk_spell_defenses"); + + b.HasIndex("SpellId") + .HasDatabaseName("ix_spell_defenses_spell_id"); + + b.ToTable("spell_defenses", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellRitual", b => + { + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(1); + + b.Property("PrimaryCheck") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("primary_check") + .HasColumnOrder(2); + + b.Property("SecondaryCasters") + .HasColumnType("integer") + .HasColumnName("secondary_casters") + .HasColumnOrder(3); + + b.Property("SecondaryChecks") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("secondary_checks") + .HasColumnOrder(4); + + b.HasKey("SpellId") + .HasName("pk_spell_rituals"); + + b.ToTable("spell_rituals", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Trait", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Type") + .HasColumnType("trait_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_traits"); + + b.ToTable("traits", (string)null); + }); + + modelBuilder.Entity("DeityTraining", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", null) + .WithMany() + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_training_deities_deity_id"); + + b.HasOne("Pf2eModel.Model.Common.Training", null) + .WithMany() + .HasForeignKey("SkillsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_training_trainings_skills_id"); + }); + + modelBuilder.Entity("EntityKeyword", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("EntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_keyword_entities_entities_id"); + + b.HasOne("Pf2eModel.Model.Base.Keywords.Keyword", null) + .WithMany() + .HasForeignKey("KeywordsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_keyword_keywords_keywords_id"); + }); + + modelBuilder.Entity("EntityTrait", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("EntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_trait_entities_entities_id"); + + b.HasOne("Pf2eModel.Model.Structure.Trait", null) + .WithMany() + .HasForeignKey("TraitsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .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") + .WithMany("Aliases") + .HasForeignKey("KeywordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_keyword_aliases_keywords_keyword_id"); + + b.Navigation("Keyword"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany("Sources") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_sources_entities_entity_id"); + + b.HasOne("Pf2eModel.Model.Base.Source.Source", "Source") + .WithMany("EntitySources") + .HasForeignKey("SourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_sources_sources_source_id"); + + b.Navigation("Entity"); + + b.Navigation("Source"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.EntityExternal", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany("Externals") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_externals_entities_entity_id"); + + b.HasOne("Pf2eModel.Model.Base.Targets.ExternalTarget", "Target") + .WithMany("EntityExternals") + .HasForeignKey("TargetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_externals_external_targets_target_id"); + + b.Navigation("Entity"); + + b.Navigation("Target"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Action", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Action", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_actions_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Ancestry", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestries_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryBoost", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryBoosts") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_boosts_ancestries_ancestry_id"); + + b.Navigation("Ancestry"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryItem", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryItems") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_items_ancestries_ancestry_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Item") + .WithMany() + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_items_entities_item_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Item"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryLanguage", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryLanguages") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_languages_ancestries_ancestry_id"); + + b.HasOne("Pf2eModel.Model.Common.Language", "Language") + .WithMany() + .HasForeignKey("LanguageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_languages_languages_language_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Language"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Background", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_backgrounds_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b => + { + b.HasOne("Pf2eModel.Model.Structure.Background", "Background") + .WithMany("BackgroundBoosts") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_boosts_backgrounds_background_id"); + + b.Navigation("Background"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundItem", b => + { + b.HasOne("Pf2eModel.Model.Structure.Background", "Background") + .WithMany("BackgroundItems") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_items_backgrounds_background_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_items_entities_entity_id"); + + b.Navigation("Background"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundTraining", b => + { + b.HasOne("Pf2eModel.Model.Structure.Background", "Background") + .WithMany("BackgroundSkills") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_skills_backgrounds_background_id"); + + b.HasOne("Pf2eModel.Model.Common.Training", "Training") + .WithMany() + .HasForeignKey("TrainingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_skills_trainings_training_id"); + + b.Navigation("Background"); + + b.Navigation("Training"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Class", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Class", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_classes_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAbility", b => + { + b.HasOne("Pf2eModel.Model.Structure.Class", "Class") + .WithMany("ClassKeyAbilities") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_key_abilities_classes_class_id"); + + b.Navigation("Class"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassProgression", b => + { + b.HasOne("Pf2eModel.Model.Structure.Class", "Class") + .WithMany("ClassProgressions") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_progressions_classes_class_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("fk_class_progressions_entities_entity_id"); + + b.Navigation("Class"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassTraining", b => + { + b.HasOne("Pf2eModel.Model.Structure.Class", "Class") + .WithMany("ClassTrainings") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_trainings_classes_class_id"); + + b.HasOne("Pf2eModel.Model.Common.Training", "Training") + .WithMany() + .HasForeignKey("TrainingId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("fk_class_trainings_trainings_training_id"); + + b.Navigation("Class"); + + b.Navigation("Training"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Condition", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Condition", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_conditions_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Deity", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Deity", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deities_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityAttribute", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeityAttributes") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_attributes_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityDomain", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeityDomains") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_domains_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeitySpell", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeitySpells") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_spells_deities_deity_id"); + + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithMany() + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_spells_spells_spell_id"); + + b.Navigation("Deity"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityWeapon", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeityWeapons") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_weapons_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Feat", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_feats_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.FeatRelation.FeatPrerequisite", b => + { + b.HasOne("Pf2eModel.Model.Structure.Feat", "Feat") + .WithMany("FeatPrerequisites") + .HasForeignKey("FeatId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_feat_prerequisites_feats_feat_id"); + + b.Navigation("Feat"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Heritage", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("Heritages") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_heritages_ancestries_ancestry_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Heritage", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_heritages_entities_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Spell", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Spell", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spells_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellArea", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithOne("SpellArea") + .HasForeignKey("Pf2eModel.Model.Structure.SpellRelation.SpellArea", "SpellId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_spell_areas_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDamage", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithMany("SpellDamages") + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spell_damages_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDefense", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithMany("SpellDefenses") + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spell_defenses_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellRitual", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithOne("SpellRitual") + .HasForeignKey("Pf2eModel.Model.Structure.SpellRelation.SpellRitual", "SpellId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_spell_rituals_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Trait", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Trait", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_traits_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Entity", b => + { + b.Navigation("Aliases"); + + b.Navigation("Externals"); + + b.Navigation("Sources"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.Keyword", b => + { + b.Navigation("Aliases"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.Source", b => + { + b.Navigation("EntitySources"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.ExternalTarget", b => + { + b.Navigation("EntityExternals"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => + { + b.Navigation("AncestryBoosts"); + + b.Navigation("AncestryItems"); + + b.Navigation("AncestryLanguages"); + + b.Navigation("Heritages"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b => + { + b.Navigation("BackgroundBoosts"); + + b.Navigation("BackgroundItems"); + + b.Navigation("BackgroundSkills"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Class", b => + { + b.Navigation("ClassKeyAbilities"); + + b.Navigation("ClassProgressions"); + + b.Navigation("ClassTrainings"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Deity", b => + { + b.Navigation("DeityAttributes"); + + b.Navigation("DeityDomains"); + + b.Navigation("DeitySpells"); + + b.Navigation("DeityWeapons"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b => + { + b.Navigation("FeatPrerequisites"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Spell", b => + { + b.Navigation("SpellArea"); + + b.Navigation("SpellDamages"); + + b.Navigation("SpellDefenses"); + + b.Navigation("SpellRitual"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Pf2eModel/Migrations/20250418083111_1.cs b/Pf2eModel/Migrations/20250418083111_1.cs new file mode 100644 index 0000000..d270f10 --- /dev/null +++ b/Pf2eModel/Migrations/20250418083111_1.cs @@ -0,0 +1,1199 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Pf2eModel.Model.Enum; + +#nullable disable + +namespace Pf2eModel.Migrations +{ + /// + public partial class _1 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("Npgsql:Enum:action_category", "unknown,offensive,defensive,interaction,familiar,army_tactic,army_war_action,kingdom_activity,kingdom_feat,kingdom_feature") + .Annotation("Npgsql:Enum:action_type", "none,1_action,2_actions,3_actions,1-3_actions,1-2_actions") + .Annotation("Npgsql:Enum:alias_type", "legacy,english,legacy_english,hobby,other") + .Annotation("Npgsql:Enum:ancestry_vision", "normal,low-light-vision,darkvision") + .Annotation("Npgsql:Enum:attribute_values", "any,str,dex,con,int,wis,cha") + .Annotation("Npgsql:Enum:class_progression_type", "entity,ancestry_feat,class_feat,general_feat,skill_feat,skill_increase") + .Annotation("Npgsql:Enum:condition_group", "unknown,senses,abilities,death,attitudes,detection") + .Annotation("Npgsql:Enum:deity_category", "deity,pantheon,covenant,philosophy") + .Annotation("Npgsql:Enum:deity_fonts", "none,heal,harm,any") + .Annotation("Npgsql:Enum:deity_sanctification", "holy,unholy,any") + .Annotation("Npgsql:Enum:entity_rarity", "common,uncommon,rare,unique") + .Annotation("Npgsql:Enum:entity_type", "unknown,trait,action,ancestry,background,backpack,campaign_feature,class,condition,deity,feat,heritage,spell") + .Annotation("Npgsql:Enum:feat_action_type", "passive,action,reaction,free") + .Annotation("Npgsql:Enum:feat_category", "ancestryfeature,classfeature,calling,class,skill,general,ancestry,bonus,deityboon,curse,pfsboon,campaign_feature") + .Annotation("Npgsql:Enum:size", "med,tiny") + .Annotation("Npgsql:Enum:source_category", "rulebook,adventure-path,lost-omens,adventures,comics,blog-posts,society") + .Annotation("Npgsql:Enum:spell_area_type", "burst,emanation,cone,line,square,cube,cylinder") + .Annotation("Npgsql:Enum:spell_damage_category", "persistent,splash") + .Annotation("Npgsql:Enum:spell_damage_kinds", "damage,healing,any") + .Annotation("Npgsql:Enum:training_stage", "untrained,trained,expert,master,legendary") + .Annotation("Npgsql:Enum:trait_type", "regular,tradition"); + + migrationBuilder.CreateTable( + name: "entities", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false, comment: "Отображаемое имя"), + type = table.Column(type: "entity_type", nullable: false, comment: "Тип объекта"), + slug = table.Column(type: "character varying(255)", maxLength: 255, nullable: false, comment: "Часть имени в URL"), + img = table.Column(type: "character varying(255)", maxLength: 255, nullable: false, comment: "Изображение объекта"), + description = table.Column(type: "text", nullable: false, comment: "Текстовое описание объекта"), + rarity = table.Column(type: "entity_rarity", nullable: false), + is_translated = table.Column(type: "boolean", nullable: true, comment: "Флаг, указывающий, что у объекта существует перевод"), + is_checked = table.Column(type: "boolean", nullable: true, comment: "Флаг, указывающий, что объект был проверен и не требует автоматической перезаписи") + }, + constraints: table => + { + table.PrimaryKey("pk_entities", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "external_targets", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + icon = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + prefix = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_external_targets", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "frequencies", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + max = table.Column(type: "integer", nullable: false), + per = table.Column(type: "integer", nullable: false), + value = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_frequencies", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "keywords", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + slug = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_keywords", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "languages", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + slug = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + rarity = table.Column(type: "entity_rarity", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_languages", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "sources", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + category = table.Column(type: "source_category", nullable: false), + release_date = table.Column(type: "date", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_sources", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "trainings", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + key = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_trainings", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "actions", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + type = table.Column(type: "action_type", nullable: false), + actions = table.Column(type: "integer", nullable: true), + max_actions = table.Column(type: "integer", nullable: true), + is_reaction = table.Column(type: "boolean", nullable: false), + is_free_action = table.Column(type: "boolean", nullable: false), + is_passive = table.Column(type: "boolean", nullable: false), + extra = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_actions", x => x.id); + table.ForeignKey( + name: "fk_actions_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ancestries", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + size = table.Column(type: "size", nullable: false), + hp = table.Column(type: "integer", nullable: false), + reach = table.Column(type: "integer", nullable: false), + speed = table.Column(type: "integer", nullable: false), + vision = table.Column(type: "ancestry_vision", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_ancestries", x => x.id); + table.ForeignKey( + name: "fk_ancestries_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "backgrounds", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_backgrounds", x => x.id); + table.ForeignKey( + name: "fk_backgrounds_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "classes", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + hp = table.Column(type: "integer", nullable: false), + perception = table.Column(type: "integer", nullable: false), + spellcasting = table.Column(type: "boolean", nullable: false), + additional_trained_skills = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_classes", x => x.id); + table.ForeignKey( + name: "fk_classes_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "conditions", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + group = table.Column(type: "condition_group", nullable: true), + extra = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_conditions", x => x.id); + table.ForeignKey( + name: "fk_conditions_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "deities", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + category = table.Column(type: "deity_category", nullable: false), + fonts = table.Column(type: "deity_fonts", nullable: false), + sanctification = table.Column(type: "deity_sanctification", nullable: false), + sanctification_must = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_deities", x => x.id); + table.ForeignKey( + name: "fk_deities_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "entity_aliases", + columns: table => new + { + entity_id = table.Column(type: "integer", nullable: false), + type = table.Column(type: "alias_type", nullable: false), + alias = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_entity_aliases", x => new { x.entity_id, x.type }); + 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 + { + id = table.Column(type: "integer", nullable: false), + type = table.Column(type: "action_type", nullable: false), + category = table.Column(type: "action_category", nullable: false), + actions = table.Column(type: "integer", nullable: true), + level = table.Column(type: "integer", nullable: false), + level_taken = table.Column(type: "integer", nullable: true), + max_takable = table.Column(type: "integer", nullable: true), + location = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + only_level1 = table.Column(type: "boolean", nullable: true), + extra = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_feats", x => x.id); + table.ForeignKey( + name: "fk_feats_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "spells", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + level = table.Column(type: "integer", nullable: false), + cost = table.Column(type: "integer", nullable: false), + counteraction = table.Column(type: "boolean", nullable: false), + sustained = table.Column(type: "boolean", nullable: false), + duration = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + range = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + requirements = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + target = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + time = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + can_heightening = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_spells", x => x.id); + table.ForeignKey( + name: "fk_spells_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "traits", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + type = table.Column(type: "trait_type", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_traits", x => x.id); + table.ForeignKey( + name: "fk_traits_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "entity_externals", + columns: table => new + { + entity_id = table.Column(type: "integer", nullable: false), + target_id = table.Column(type: "integer", nullable: false), + 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_entity_externals", x => new { x.entity_id, x.target_id }); + table.ForeignKey( + name: "fk_entity_externals_entities_entity_id", + column: x => x.entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_entity_externals_external_targets_target_id", + column: x => x.target_id, + principalTable: "external_targets", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "entity_keyword", + columns: table => new + { + entities_id = table.Column(type: "integer", nullable: false), + keywords_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_entity_keyword", x => new { x.entities_id, x.keywords_id }); + table.ForeignKey( + name: "fk_entity_keyword_entities_entities_id", + column: x => x.entities_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_entity_keyword_keywords_keywords_id", + column: x => x.keywords_id, + principalTable: "keywords", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "keyword_aliases", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + keyword_id = table.Column(type: "integer", nullable: false), + value = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_keyword_aliases", x => x.id); + table.ForeignKey( + name: "fk_keyword_aliases_keywords_keyword_id", + column: x => x.keyword_id, + principalTable: "keywords", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "entity_sources", + columns: table => new + { + entity_id = table.Column(type: "integer", nullable: false), + source_id = table.Column(type: "integer", nullable: false), + 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_entity_sources", x => new { x.entity_id, x.source_id }); + table.ForeignKey( + name: "fk_entity_sources_entities_entity_id", + column: x => x.entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_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 + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ancestry_id = table.Column(type: "integer", nullable: false), + boost = table.Column(type: "boolean", nullable: false), + value = table.Column(type: "attribute_values", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_ancestry_boosts", x => x.id); + table.ForeignKey( + name: "fk_ancestry_boosts_ancestries_ancestry_id", + column: x => x.ancestry_id, + principalTable: "ancestries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ancestry_items", + columns: table => new + { + ancestry_id = table.Column(type: "integer", nullable: false), + item_id = table.Column(type: "integer", nullable: false), + level = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_ancestry_items", x => new { x.ancestry_id, x.item_id }); + table.ForeignKey( + name: "fk_ancestry_items_ancestries_ancestry_id", + column: x => x.ancestry_id, + principalTable: "ancestries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_ancestry_items_entities_item_id", + column: x => x.item_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ancestry_languages", + columns: table => new + { + ancestry_id = table.Column(type: "integer", nullable: false), + language_id = table.Column(type: "integer", nullable: false), + is_additional = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_ancestry_languages", x => new { x.ancestry_id, x.language_id }); + table.ForeignKey( + name: "fk_ancestry_languages_ancestries_ancestry_id", + column: x => x.ancestry_id, + principalTable: "ancestries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_ancestry_languages_languages_language_id", + column: x => x.language_id, + principalTable: "languages", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "heritages", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + ancestry_id = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_heritages", x => x.id); + table.ForeignKey( + name: "fk_heritages_ancestries_ancestry_id", + column: x => x.ancestry_id, + principalTable: "ancestries", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_heritages_entities_id", + column: x => x.id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "background_boosts", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + background_id = table.Column(type: "integer", nullable: false), + attribute = table.Column(type: "attribute_values", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_background_boosts", x => x.id); + table.ForeignKey( + name: "fk_background_boosts_backgrounds_background_id", + column: x => x.background_id, + principalTable: "backgrounds", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "background_items", + columns: table => new + { + background_id = table.Column(type: "integer", nullable: false), + entity_id = table.Column(type: "integer", nullable: false), + level = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_background_items", x => new { x.background_id, x.entity_id }); + table.ForeignKey( + name: "fk_background_items_backgrounds_background_id", + column: x => x.background_id, + principalTable: "backgrounds", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_background_items_entities_entity_id", + column: x => x.entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "background_skills", + columns: table => new + { + id = table.Column(type: "integer", nullable: false), + background_id = table.Column(type: "integer", nullable: false), + training_id = table.Column(type: "integer", nullable: false), + level = table.Column(type: "training_stage", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_background_skills", x => x.id); + table.ForeignKey( + name: "fk_background_skills_backgrounds_background_id", + column: x => x.background_id, + principalTable: "backgrounds", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_background_skills_trainings_training_id", + column: x => x.training_id, + principalTable: "trainings", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "class_key_abilities", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + class_id = table.Column(type: "integer", nullable: false), + value = table.Column(type: "attribute_values", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_class_key_abilities", x => x.id); + table.ForeignKey( + name: "fk_class_key_abilities_classes_class_id", + column: x => x.class_id, + principalTable: "classes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "class_progressions", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + class_id = table.Column(type: "integer", nullable: false), + type = table.Column(type: "class_progression_type", nullable: false), + entity_id = table.Column(type: "integer", nullable: true), + level = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_class_progressions", x => x.id); + table.ForeignKey( + name: "fk_class_progressions_classes_class_id", + column: x => x.class_id, + principalTable: "classes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_class_progressions_entities_entity_id", + column: x => x.entity_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "class_trainings", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + class_id = table.Column(type: "integer", nullable: false), + training_id = table.Column(type: "integer", nullable: true), + name = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + stage = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_class_trainings", x => x.id); + table.ForeignKey( + name: "fk_class_trainings_classes_class_id", + column: x => x.class_id, + principalTable: "classes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_class_trainings_trainings_training_id", + column: x => x.training_id, + principalTable: "trainings", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "deity_attributes", + columns: table => new + { + deity_id = table.Column(type: "integer", nullable: false), + attribute = table.Column(type: "attribute_values", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_deity_attributes", x => new { x.deity_id, x.attribute }); + table.ForeignKey( + name: "fk_deity_attributes_deities_deity_id", + column: x => x.deity_id, + principalTable: "deities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "deity_domains", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + deity_id = table.Column(type: "integer", nullable: false), + is_primary = table.Column(type: "boolean", nullable: false), + value = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_deity_domains", x => x.id); + table.ForeignKey( + name: "fk_deity_domains_deities_deity_id", + column: x => x.deity_id, + principalTable: "deities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "deity_training", + columns: table => new + { + deity_id = table.Column(type: "integer", nullable: false), + skills_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_deity_training", x => new { x.deity_id, x.skills_id }); + table.ForeignKey( + name: "fk_deity_training_deities_deity_id", + column: x => x.deity_id, + principalTable: "deities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_deity_training_trainings_skills_id", + column: x => x.skills_id, + principalTable: "trainings", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "deity_weapons", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + deity_id = table.Column(type: "integer", nullable: false), + weapon = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_deity_weapons", x => x.id); + table.ForeignKey( + name: "fk_deity_weapons_deities_deity_id", + column: x => x.deity_id, + principalTable: "deities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "feat_prerequisites", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + feat_id = table.Column(type: "integer", nullable: false), + value = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_feat_prerequisites", x => x.id); + table.ForeignKey( + name: "fk_feat_prerequisites_feats_feat_id", + column: x => x.feat_id, + principalTable: "feats", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "deity_spells", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + deity_id = table.Column(type: "integer", nullable: false), + level = table.Column(type: "integer", nullable: false), + spell_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_deity_spells", x => x.id); + table.ForeignKey( + name: "fk_deity_spells_deities_deity_id", + column: x => x.deity_id, + principalTable: "deities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_deity_spells_spells_spell_id", + column: x => x.spell_id, + principalTable: "spells", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "spell_areas", + columns: table => new + { + spell_id = table.Column(type: "integer", nullable: false), + details = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + type = table.Column(type: "spell_area_type", nullable: false), + value = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_spell_areas", x => x.spell_id); + table.ForeignKey( + name: "fk_spell_areas_spells_spell_id", + column: x => x.spell_id, + principalTable: "spells", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "spell_damages", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + spell_id = table.Column(type: "integer", nullable: false), + key = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + apply_mod = table.Column(type: "boolean", nullable: true), + category = table.Column(type: "spell_damage_category", nullable: true), + formula = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + kinds = table.Column(type: "spell_damage_kinds", nullable: false), + materials = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), + type = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_spell_damages", x => x.id); + table.ForeignKey( + name: "fk_spell_damages_spells_spell_id", + column: x => x.spell_id, + principalTable: "spells", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "spell_defenses", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + spell_id = table.Column(type: "integer", nullable: false), + is_passive = table.Column(type: "boolean", nullable: false), + is_basic = table.Column(type: "boolean", nullable: true), + statistic = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_spell_defenses", x => x.id); + table.ForeignKey( + name: "fk_spell_defenses_spells_spell_id", + column: x => x.spell_id, + principalTable: "spells", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "spell_rituals", + columns: table => new + { + spell_id = table.Column(type: "integer", nullable: false), + primary_check = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), + secondary_casters = table.Column(type: "integer", nullable: false), + secondary_checks = table.Column(type: "character varying(255)", maxLength: 255, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_spell_rituals", x => x.spell_id); + table.ForeignKey( + name: "fk_spell_rituals_spells_spell_id", + column: x => x.spell_id, + principalTable: "spells", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "entity_trait", + columns: table => new + { + entities_id = table.Column(type: "integer", nullable: false), + traits_id = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_entity_trait", x => new { x.entities_id, x.traits_id }); + table.ForeignKey( + name: "fk_entity_trait_entities_entities_id", + column: x => x.entities_id, + principalTable: "entities", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_entity_trait_traits_traits_id", + column: x => x.traits_id, + principalTable: "traits", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "ix_ancestry_boosts_ancestry_id", + table: "ancestry_boosts", + column: "ancestry_id"); + + migrationBuilder.CreateIndex( + name: "ix_ancestry_items_item_id", + table: "ancestry_items", + column: "item_id"); + + migrationBuilder.CreateIndex( + name: "ix_ancestry_languages_language_id", + table: "ancestry_languages", + column: "language_id"); + + migrationBuilder.CreateIndex( + name: "ix_background_boosts_background_id", + table: "background_boosts", + column: "background_id"); + + migrationBuilder.CreateIndex( + name: "ix_background_items_entity_id", + table: "background_items", + column: "entity_id"); + + migrationBuilder.CreateIndex( + name: "ix_background_skills_background_id", + table: "background_skills", + column: "background_id"); + + migrationBuilder.CreateIndex( + name: "ix_background_skills_training_id", + table: "background_skills", + column: "training_id"); + + migrationBuilder.CreateIndex( + name: "ix_class_key_abilities_class_id", + table: "class_key_abilities", + column: "class_id"); + + migrationBuilder.CreateIndex( + name: "ix_class_progressions_class_id", + table: "class_progressions", + column: "class_id"); + + migrationBuilder.CreateIndex( + name: "ix_class_progressions_entity_id", + table: "class_progressions", + column: "entity_id"); + + migrationBuilder.CreateIndex( + name: "ix_class_trainings_class_id", + table: "class_trainings", + column: "class_id"); + + migrationBuilder.CreateIndex( + name: "ix_class_trainings_training_id", + table: "class_trainings", + column: "training_id"); + + migrationBuilder.CreateIndex( + name: "ix_deity_domains_deity_id", + table: "deity_domains", + column: "deity_id"); + + migrationBuilder.CreateIndex( + name: "ix_deity_spells_deity_id", + table: "deity_spells", + column: "deity_id"); + + migrationBuilder.CreateIndex( + name: "ix_deity_spells_spell_id", + table: "deity_spells", + column: "spell_id"); + + migrationBuilder.CreateIndex( + name: "ix_deity_training_skills_id", + table: "deity_training", + column: "skills_id"); + + migrationBuilder.CreateIndex( + name: "ix_deity_weapons_deity_id", + table: "deity_weapons", + column: "deity_id"); + + migrationBuilder.CreateIndex( + name: "ix_entity_externals_target_id", + table: "entity_externals", + column: "target_id"); + + migrationBuilder.CreateIndex( + name: "ix_entity_keyword_keywords_id", + table: "entity_keyword", + column: "keywords_id"); + + migrationBuilder.CreateIndex( + name: "ix_entity_sources_source_id", + table: "entity_sources", + column: "source_id"); + + migrationBuilder.CreateIndex( + name: "ix_entity_trait_traits_id", + table: "entity_trait", + column: "traits_id"); + + migrationBuilder.CreateIndex( + name: "ix_feat_prerequisites_feat_id", + table: "feat_prerequisites", + column: "feat_id"); + + migrationBuilder.CreateIndex( + name: "ix_heritages_ancestry_id", + table: "heritages", + column: "ancestry_id"); + + migrationBuilder.CreateIndex( + name: "ix_keyword_aliases_keyword_id", + table: "keyword_aliases", + column: "keyword_id"); + + migrationBuilder.CreateIndex( + name: "ix_spell_damages_spell_id", + table: "spell_damages", + column: "spell_id"); + + migrationBuilder.CreateIndex( + name: "ix_spell_defenses_spell_id", + table: "spell_defenses", + column: "spell_id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "actions"); + + migrationBuilder.DropTable( + name: "ancestry_boosts"); + + migrationBuilder.DropTable( + name: "ancestry_items"); + + migrationBuilder.DropTable( + name: "ancestry_languages"); + + migrationBuilder.DropTable( + name: "background_boosts"); + + migrationBuilder.DropTable( + name: "background_items"); + + migrationBuilder.DropTable( + name: "background_skills"); + + migrationBuilder.DropTable( + name: "class_key_abilities"); + + migrationBuilder.DropTable( + name: "class_progressions"); + + migrationBuilder.DropTable( + name: "class_trainings"); + + migrationBuilder.DropTable( + name: "conditions"); + + migrationBuilder.DropTable( + name: "deity_attributes"); + + migrationBuilder.DropTable( + name: "deity_domains"); + + migrationBuilder.DropTable( + name: "deity_spells"); + + migrationBuilder.DropTable( + name: "deity_training"); + + migrationBuilder.DropTable( + name: "deity_weapons"); + + migrationBuilder.DropTable( + name: "entity_aliases"); + + migrationBuilder.DropTable( + name: "entity_externals"); + + migrationBuilder.DropTable( + name: "entity_keyword"); + + migrationBuilder.DropTable( + name: "entity_sources"); + + migrationBuilder.DropTable( + name: "entity_trait"); + + migrationBuilder.DropTable( + name: "feat_prerequisites"); + + migrationBuilder.DropTable( + name: "frequencies"); + + migrationBuilder.DropTable( + name: "heritages"); + + migrationBuilder.DropTable( + name: "keyword_aliases"); + + migrationBuilder.DropTable( + name: "spell_areas"); + + migrationBuilder.DropTable( + name: "spell_damages"); + + migrationBuilder.DropTable( + name: "spell_defenses"); + + migrationBuilder.DropTable( + name: "spell_rituals"); + + migrationBuilder.DropTable( + name: "languages"); + + migrationBuilder.DropTable( + name: "backgrounds"); + + migrationBuilder.DropTable( + name: "classes"); + + migrationBuilder.DropTable( + name: "trainings"); + + migrationBuilder.DropTable( + name: "deities"); + + migrationBuilder.DropTable( + name: "external_targets"); + + migrationBuilder.DropTable( + name: "sources"); + + migrationBuilder.DropTable( + name: "traits"); + + migrationBuilder.DropTable( + name: "feats"); + + migrationBuilder.DropTable( + name: "ancestries"); + + migrationBuilder.DropTable( + name: "keywords"); + + migrationBuilder.DropTable( + name: "spells"); + + migrationBuilder.DropTable( + name: "entities"); + } + } +} diff --git a/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs b/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs new file mode 100644 index 0000000..fd12d3e --- /dev/null +++ b/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs @@ -0,0 +1,2051 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Pf2eModel.Model; +using Pf2eModel.Model.Enum; + +#nullable disable + +namespace Pf2eModel.Migrations +{ + [DbContext(typeof(Pf2eDbContext))] + partial class Pf2eDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_category", new[] { "unknown", "offensive", "defensive", "interaction", "familiar", "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_type", new[] { "none", "1_action", "2_actions", "3_actions", "1-3_actions", "1-2_actions" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "legacy", "english", "legacy_english", "hobby", "other" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "ancestry_vision", new[] { "normal", "low-light-vision", "darkvision" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "attribute_values", new[] { "any", "str", "dex", "con", "int", "wis", "cha" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "class_progression_type", new[] { "entity", "ancestry_feat", "class_feat", "general_feat", "skill_feat", "skill_increase" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "condition_group", new[] { "unknown", "senses", "abilities", "death", "attitudes", "detection" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_category", new[] { "deity", "pantheon", "covenant", "philosophy" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_fonts", new[] { "none", "heal", "harm", "any" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_sanctification", new[] { "holy", "unholy", "any" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_rarity", new[] { "common", "uncommon", "rare", "unique" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_type", new[] { "unknown", "trait", "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_action_type", new[] { "passive", "action", "reaction", "free" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon", "campaign_feature" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "size", new[] { "med", "tiny" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "source_category", new[] { "rulebook", "adventure-path", "lost-omens", "adventures", "comics", "blog-posts", "society" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "spell_area_type", new[] { "burst", "emanation", "cone", "line", "square", "cube", "cylinder" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "spell_damage_category", new[] { "persistent", "splash" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "spell_damage_kinds", new[] { "damage", "healing", "any" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "training_stage", new[] { "untrained", "trained", "expert", "master", "legendary" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "trait_type", new[] { "regular", "tradition" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("DeityTraining", b => + { + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id"); + + b.Property("SkillsId") + .HasColumnType("integer") + .HasColumnName("skills_id"); + + b.HasKey("DeityId", "SkillsId") + .HasName("pk_deity_training"); + + b.HasIndex("SkillsId") + .HasDatabaseName("ix_deity_training_skills_id"); + + b.ToTable("deity_training", (string)null); + }); + + modelBuilder.Entity("EntityKeyword", b => + { + b.Property("EntitiesId") + .HasColumnType("integer") + .HasColumnName("entities_id"); + + b.Property("KeywordsId") + .HasColumnType("integer") + .HasColumnName("keywords_id"); + + b.HasKey("EntitiesId", "KeywordsId") + .HasName("pk_entity_keyword"); + + b.HasIndex("KeywordsId") + .HasDatabaseName("ix_entity_keyword_keywords_id"); + + b.ToTable("entity_keyword", (string)null); + }); + + modelBuilder.Entity("EntityTrait", b => + { + b.Property("EntitiesId") + .HasColumnType("integer") + .HasColumnName("entities_id"); + + b.Property("TraitsId") + .HasColumnType("integer") + .HasColumnName("traits_id"); + + b.HasKey("EntitiesId", "TraitsId") + .HasName("pk_entity_trait"); + + b.HasIndex("TraitsId") + .HasDatabaseName("ix_entity_trait_traits_id"); + + b.ToTable("entity_trait", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Entity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("text") + .HasColumnName("description") + .HasColumnOrder(6) + .HasComment("Текстовое описание объекта"); + + b.Property("Img") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("img") + .HasColumnOrder(5) + .HasComment("Изображение объекта"); + + b.Property("IsChecked") + .HasColumnType("boolean") + .HasColumnName("is_checked") + .HasColumnOrder(9) + .HasComment("Флаг, указывающий, что объект был проверен и не требует автоматической перезаписи"); + + b.Property("IsTranslated") + .HasColumnType("boolean") + .HasColumnName("is_translated") + .HasColumnOrder(8) + .HasComment("Флаг, указывающий, что у объекта существует перевод"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2) + .HasComment("Отображаемое имя"); + + b.Property("Rarity") + .HasColumnType("entity_rarity") + .HasColumnName("rarity") + .HasColumnOrder(7); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("slug") + .HasColumnOrder(4) + .HasComment("Часть имени в URL"); + + b.Property("Type") + .HasColumnType("entity_type") + .HasColumnName("type") + .HasColumnOrder(3) + .HasComment("Тип объекта"); + + b.HasKey("Id") + .HasName("pk_entities"); + + b.ToTable("entities", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.EntityAlias", b => + { + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(1); + + b.Property("Type") + .HasColumnType("alias_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.Property("Alias") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("alias") + .HasColumnOrder(3); + + b.HasKey("EntityId", "Type") + .HasName("pk_entity_aliases"); + + b.ToTable("entity_aliases", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.Keyword", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Slug") + .IsRequired() + .HasColumnType("text") + .HasColumnName("slug") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_keywords"); + + b.ToTable("keywords", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.KeywordAlias", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("KeywordId") + .HasColumnType("integer") + .HasColumnName("keyword_id") + .HasColumnOrder(2); + + b.Property("Value") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("value") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_keyword_aliases"); + + b.HasIndex("KeywordId") + .HasDatabaseName("ix_keyword_aliases_keyword_id"); + + b.ToTable("keyword_aliases", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => + { + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(1); + + b.Property("SourceId") + .HasColumnType("integer") + .HasColumnName("source_id") + .HasColumnOrder(2); + + b.Property("IsRemaster") + .HasColumnType("boolean") + .HasColumnName("is_remaster") + .HasColumnOrder(4) + .HasComment("Флаг, указывающий, что объект является частью ремастера"); + + b.Property("Suffix") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("suffix") + .HasColumnOrder(3) + .HasComment("Номер страницы, эррата и т.д."); + + b.HasKey("EntityId", "SourceId") + .HasName("pk_entity_sources"); + + b.HasIndex("SourceId") + .HasDatabaseName("ix_entity_sources_source_id"); + + b.ToTable("entity_sources", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.Source", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Category") + .HasColumnType("source_category") + .HasColumnName("category") + .HasColumnOrder(3); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("ReleaseDate") + .HasColumnType("date") + .HasColumnName("release_date") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_sources"); + + b.ToTable("sources", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.EntityExternal", b => + { + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(0); + + b.Property("TargetId") + .HasColumnType("integer") + .HasColumnName("target_id") + .HasColumnOrder(1); + + b.Property("Md5") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("md5") + .HasColumnOrder(3) + .HasComment("Контроль версии объекта"); + + b.Property("Suffix") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("suffix") + .HasColumnOrder(2) + .HasComment("Часть URL до объекта. Для источников Foundry - полный UUID объекта"); + + b.HasKey("EntityId", "TargetId") + .HasName("pk_entity_externals"); + + b.HasIndex("TargetId") + .HasDatabaseName("ix_entity_externals_target_id"); + + b.ToTable("entity_externals", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.ExternalTarget", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("icon") + .HasColumnOrder(3); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("Prefix") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("prefix") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_external_targets"); + + b.ToTable("external_targets", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Common.Frequency", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Max") + .HasColumnType("integer") + .HasColumnName("max") + .HasColumnOrder(2); + + b.Property("Per") + .HasColumnType("integer") + .HasColumnName("per") + .HasColumnOrder(3); + + b.Property("Value") + .HasColumnType("integer") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_frequencies"); + + b.ToTable("frequencies", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Common.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("Rarity") + .HasColumnType("entity_rarity") + .HasColumnName("rarity") + .HasColumnOrder(4); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("slug") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_languages"); + + b.ToTable("languages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Common.Training", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("key") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_trainings"); + + b.ToTable("trainings", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Action", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Actions") + .HasColumnType("integer") + .HasColumnName("actions") + .HasColumnOrder(3); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(6); + + b.Property("IsFreeAction") + .HasColumnType("boolean") + .HasColumnName("is_free_action") + .HasColumnOrder(6); + + b.Property("IsPassive") + .HasColumnType("boolean") + .HasColumnName("is_passive") + .HasColumnOrder(6); + + b.Property("IsReaction") + .HasColumnType("boolean") + .HasColumnName("is_reaction") + .HasColumnOrder(5); + + b.Property("MaxActions") + .HasColumnType("integer") + .HasColumnName("max_actions") + .HasColumnOrder(4); + + b.Property("Type") + .HasColumnType("action_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_actions"); + + b.ToTable("actions", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Hp") + .HasColumnType("integer") + .HasColumnName("hp") + .HasColumnOrder(3); + + b.Property("Reach") + .HasColumnType("integer") + .HasColumnName("reach") + .HasColumnOrder(4); + + b.Property("Size") + .HasColumnType("size") + .HasColumnName("size") + .HasColumnOrder(2); + + b.Property("Speed") + .HasColumnType("integer") + .HasColumnName("speed") + .HasColumnOrder(5); + + b.Property("Vision") + .HasColumnType("ancestry_vision") + .HasColumnName("vision") + .HasColumnOrder(6); + + b.HasKey("Id") + .HasName("pk_ancestries"); + + b.ToTable("ancestries", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryBoost", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(2); + + b.Property("Boost") + .HasColumnType("boolean") + .HasColumnName("boost") + .HasColumnOrder(3); + + b.Property("Value") + .HasColumnType("attribute_values") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_ancestry_boosts"); + + b.HasIndex("AncestryId") + .HasDatabaseName("ix_ancestry_boosts_ancestry_id"); + + b.ToTable("ancestry_boosts", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryItem", b => + { + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(1); + + b.Property("ItemId") + .HasColumnType("integer") + .HasColumnName("item_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(3); + + b.HasKey("AncestryId", "ItemId") + .HasName("pk_ancestry_items"); + + b.HasIndex("ItemId") + .HasDatabaseName("ix_ancestry_items_item_id"); + + b.ToTable("ancestry_items", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryLanguage", b => + { + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(1); + + b.Property("LanguageId") + .HasColumnType("integer") + .HasColumnName("language_id") + .HasColumnOrder(2); + + b.Property("IsAdditional") + .HasColumnType("boolean") + .HasColumnName("is_additional") + .HasColumnOrder(3); + + b.HasKey("AncestryId", "LanguageId") + .HasName("pk_ancestry_languages"); + + b.HasIndex("LanguageId") + .HasDatabaseName("ix_ancestry_languages_language_id"); + + b.ToTable("ancestry_languages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.HasKey("Id") + .HasName("pk_backgrounds"); + + b.ToTable("backgrounds", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Attribute") + .HasColumnType("attribute_values") + .HasColumnName("attribute") + .HasColumnOrder(3); + + b.Property("BackgroundId") + .HasColumnType("integer") + .HasColumnName("background_id") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_background_boosts"); + + b.HasIndex("BackgroundId") + .HasDatabaseName("ix_background_boosts_background_id"); + + b.ToTable("background_boosts", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundItem", b => + { + b.Property("BackgroundId") + .HasColumnType("integer") + .HasColumnName("background_id") + .HasColumnOrder(1); + + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(3); + + b.HasKey("BackgroundId", "EntityId") + .HasName("pk_background_items"); + + b.HasIndex("EntityId") + .HasDatabaseName("ix_background_items_entity_id"); + + b.ToTable("background_items", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundTraining", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("BackgroundId") + .HasColumnType("integer") + .HasColumnName("background_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("training_stage") + .HasColumnName("level") + .HasColumnOrder(4); + + b.Property("TrainingId") + .HasColumnType("integer") + .HasColumnName("training_id") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_background_skills"); + + b.HasIndex("BackgroundId") + .HasDatabaseName("ix_background_skills_background_id"); + + b.HasIndex("TrainingId") + .HasDatabaseName("ix_background_skills_training_id"); + + b.ToTable("background_skills", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Class", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("AdditionalTrainedSkills") + .HasColumnType("integer") + .HasColumnName("additional_trained_skills") + .HasColumnOrder(6); + + b.Property("Hp") + .HasColumnType("integer") + .HasColumnName("hp") + .HasColumnOrder(3); + + b.Property("Perception") + .HasColumnType("integer") + .HasColumnName("perception") + .HasColumnOrder(4); + + b.Property("Spellcasting") + .HasColumnType("boolean") + .HasColumnName("spellcasting") + .HasColumnOrder(5); + + b.HasKey("Id") + .HasName("pk_classes"); + + b.ToTable("classes", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAbility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClassId") + .HasColumnType("integer") + .HasColumnName("class_id") + .HasColumnOrder(2); + + b.Property("Value") + .HasColumnType("attribute_values") + .HasColumnName("value") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_class_key_abilities"); + + b.HasIndex("ClassId") + .HasDatabaseName("ix_class_key_abilities_class_id"); + + b.ToTable("class_key_abilities", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassProgression", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClassId") + .HasColumnType("integer") + .HasColumnName("class_id") + .HasColumnOrder(2); + + b.Property("EntityId") + .HasColumnType("integer") + .HasColumnName("entity_id") + .HasColumnOrder(5); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(31); + + b.Property("Type") + .HasColumnType("class_progression_type") + .HasColumnName("type") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_class_progressions"); + + b.HasIndex("ClassId") + .HasDatabaseName("ix_class_progressions_class_id"); + + b.HasIndex("EntityId") + .HasDatabaseName("ix_class_progressions_entity_id"); + + b.ToTable("class_progressions", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassTraining", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClassId") + .HasColumnType("integer") + .HasColumnName("class_id") + .HasColumnOrder(2); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(4); + + b.Property("Stage") + .HasColumnType("integer") + .HasColumnName("stage") + .HasColumnOrder(5); + + b.Property("TrainingId") + .HasColumnType("integer") + .HasColumnName("training_id") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_class_trainings"); + + b.HasIndex("ClassId") + .HasDatabaseName("ix_class_trainings_class_id"); + + b.HasIndex("TrainingId") + .HasDatabaseName("ix_class_trainings_training_id"); + + b.ToTable("class_trainings", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Condition", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(3); + + b.Property("Group") + .HasColumnType("condition_group") + .HasColumnName("group") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_conditions"); + + b.ToTable("conditions", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Deity", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Category") + .HasColumnType("deity_category") + .HasColumnName("category") + .HasColumnOrder(2); + + b.Property("Fonts") + .HasColumnType("deity_fonts") + .HasColumnName("fonts") + .HasColumnOrder(3); + + b.Property("Sanctification") + .HasColumnType("deity_sanctification") + .HasColumnName("sanctification") + .HasColumnOrder(4); + + b.Property("SanctificationMust") + .HasColumnType("boolean") + .HasColumnName("sanctification_must") + .HasColumnOrder(5); + + b.HasKey("Id") + .HasName("pk_deities"); + + b.ToTable("deities", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityAttribute", b => + { + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(1); + + b.Property("Attribute") + .HasColumnType("attribute_values") + .HasColumnName("attribute") + .HasColumnOrder(2); + + b.HasKey("DeityId", "Attribute") + .HasName("pk_deity_attributes"); + + b.ToTable("deity_attributes", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityDomain", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(2); + + b.Property("IsPrimary") + .HasColumnType("boolean") + .HasColumnName("is_primary") + .HasColumnOrder(3); + + b.Property("Value") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_deity_domains"); + + b.HasIndex("DeityId") + .HasDatabaseName("ix_deity_domains_deity_id"); + + b.ToTable("deity_domains", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeitySpell", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(2); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(3); + + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(4); + + b.HasKey("Id") + .HasName("pk_deity_spells"); + + b.HasIndex("DeityId") + .HasDatabaseName("ix_deity_spells_deity_id"); + + b.HasIndex("SpellId") + .HasDatabaseName("ix_deity_spells_spell_id"); + + b.ToTable("deity_spells", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeityId") + .HasColumnType("integer") + .HasColumnName("deity_id") + .HasColumnOrder(2); + + b.Property("Weapon") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("weapon") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_deity_weapons"); + + b.HasIndex("DeityId") + .HasDatabaseName("ix_deity_weapons_deity_id"); + + b.ToTable("deity_weapons", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Actions") + .HasColumnType("integer") + .HasColumnName("actions") + .HasColumnOrder(4); + + b.Property("Category") + .HasColumnType("action_category") + .HasColumnName("category") + .HasColumnOrder(3); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(10); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(5); + + b.Property("LevelTaken") + .HasColumnType("integer") + .HasColumnName("level_taken") + .HasColumnOrder(6); + + b.Property("Location") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("location") + .HasColumnOrder(8); + + b.Property("MaxTakable") + .HasColumnType("integer") + .HasColumnName("max_takable") + .HasColumnOrder(7); + + b.Property("OnlyLevel1") + .HasColumnType("boolean") + .HasColumnName("only_level1") + .HasColumnOrder(9); + + b.Property("Type") + .HasColumnType("action_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_feats"); + + b.ToTable("feats", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.FeatRelation.FeatPrerequisite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FeatId") + .HasColumnType("integer") + .HasColumnName("feat_id") + .HasColumnOrder(2); + + b.Property("Value") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("value") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_feat_prerequisites"); + + b.HasIndex("FeatId") + .HasDatabaseName("ix_feat_prerequisites_feat_id"); + + b.ToTable("feat_prerequisites", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Heritage", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("AncestryId") + .HasColumnType("integer") + .HasColumnName("ancestry_id") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_heritages"); + + b.HasIndex("AncestryId") + .HasDatabaseName("ix_heritages_ancestry_id"); + + b.ToTable("heritages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Spell", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("CanHeightening") + .HasColumnType("boolean") + .HasColumnName("can_heightening") + .HasColumnOrder(11); + + b.Property("Cost") + .HasColumnType("integer") + .HasColumnName("cost") + .HasColumnOrder(3); + + b.Property("Counteraction") + .HasColumnType("boolean") + .HasColumnName("counteraction") + .HasColumnOrder(4); + + b.Property("Duration") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("duration") + .HasColumnOrder(6); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level") + .HasColumnOrder(2); + + b.Property("Range") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("range") + .HasColumnOrder(7); + + b.Property("Requirements") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("requirements") + .HasColumnOrder(8); + + b.Property("Sustained") + .HasColumnType("boolean") + .HasColumnName("sustained") + .HasColumnOrder(5); + + b.Property("Target") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("target") + .HasColumnOrder(9); + + b.Property("Time") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("time") + .HasColumnOrder(10); + + b.HasKey("Id") + .HasName("pk_spells"); + + b.ToTable("spells", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellArea", b => + { + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(1); + + b.Property("Details") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("details") + .HasColumnOrder(2); + + b.Property("Type") + .HasColumnType("spell_area_type") + .HasColumnName("type") + .HasColumnOrder(3); + + b.Property("Value") + .HasColumnType("integer") + .HasColumnName("value") + .HasColumnOrder(4); + + b.HasKey("SpellId") + .HasName("pk_spell_areas"); + + b.ToTable("spell_areas", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDamage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApplyMod") + .HasColumnType("boolean") + .HasColumnName("apply_mod") + .HasColumnOrder(4); + + b.Property("Category") + .HasColumnType("spell_damage_category") + .HasColumnName("category") + .HasColumnOrder(5); + + b.Property("Formula") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("formula") + .HasColumnOrder(6); + + b.Property("Key") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("key") + .HasColumnOrder(3); + + b.Property("Kinds") + .HasColumnType("spell_damage_kinds") + .HasColumnName("kinds") + .HasColumnOrder(7); + + b.Property("Materials") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("materials") + .HasColumnOrder(8); + + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(2); + + b.Property("Type") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("type") + .HasColumnOrder(9); + + b.HasKey("Id") + .HasName("pk_spell_damages"); + + b.HasIndex("SpellId") + .HasDatabaseName("ix_spell_damages_spell_id"); + + b.ToTable("spell_damages", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDefense", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsBasic") + .HasColumnType("boolean") + .HasColumnName("is_basic") + .HasColumnOrder(4); + + b.Property("IsPassive") + .HasColumnType("boolean") + .HasColumnName("is_passive") + .HasColumnOrder(3); + + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(2); + + b.Property("Statistic") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("statistic") + .HasColumnOrder(5); + + b.HasKey("Id") + .HasName("pk_spell_defenses"); + + b.HasIndex("SpellId") + .HasDatabaseName("ix_spell_defenses_spell_id"); + + b.ToTable("spell_defenses", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellRitual", b => + { + b.Property("SpellId") + .HasColumnType("integer") + .HasColumnName("spell_id") + .HasColumnOrder(1); + + b.Property("PrimaryCheck") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("primary_check") + .HasColumnOrder(2); + + b.Property("SecondaryCasters") + .HasColumnType("integer") + .HasColumnName("secondary_casters") + .HasColumnOrder(3); + + b.Property("SecondaryChecks") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("secondary_checks") + .HasColumnOrder(4); + + b.HasKey("SpellId") + .HasName("pk_spell_rituals"); + + b.ToTable("spell_rituals", (string)null); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Trait", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id") + .HasColumnOrder(1); + + b.Property("Type") + .HasColumnType("trait_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_traits"); + + b.ToTable("traits", (string)null); + }); + + modelBuilder.Entity("DeityTraining", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", null) + .WithMany() + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_training_deities_deity_id"); + + b.HasOne("Pf2eModel.Model.Common.Training", null) + .WithMany() + .HasForeignKey("SkillsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_training_trainings_skills_id"); + }); + + modelBuilder.Entity("EntityKeyword", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("EntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_keyword_entities_entities_id"); + + b.HasOne("Pf2eModel.Model.Base.Keywords.Keyword", null) + .WithMany() + .HasForeignKey("KeywordsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_keyword_keywords_keywords_id"); + }); + + modelBuilder.Entity("EntityTrait", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("EntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_trait_entities_entities_id"); + + b.HasOne("Pf2eModel.Model.Structure.Trait", null) + .WithMany() + .HasForeignKey("TraitsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .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") + .WithMany("Aliases") + .HasForeignKey("KeywordId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_keyword_aliases_keywords_keyword_id"); + + b.Navigation("Keyword"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.EntitySource", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany("Sources") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_sources_entities_entity_id"); + + b.HasOne("Pf2eModel.Model.Base.Source.Source", "Source") + .WithMany("EntitySources") + .HasForeignKey("SourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_sources_sources_source_id"); + + b.Navigation("Entity"); + + b.Navigation("Source"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.EntityExternal", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany("Externals") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_externals_entities_entity_id"); + + b.HasOne("Pf2eModel.Model.Base.Targets.ExternalTarget", "Target") + .WithMany("EntityExternals") + .HasForeignKey("TargetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_externals_external_targets_target_id"); + + b.Navigation("Entity"); + + b.Navigation("Target"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Action", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Action", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_actions_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Ancestry", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestries_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryBoost", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryBoosts") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_boosts_ancestries_ancestry_id"); + + b.Navigation("Ancestry"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryItem", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryItems") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_items_ancestries_ancestry_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Item") + .WithMany() + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_items_entities_item_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Item"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.AncestryRelation.AncestryLanguage", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryLanguages") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_languages_ancestries_ancestry_id"); + + b.HasOne("Pf2eModel.Model.Common.Language", "Language") + .WithMany() + .HasForeignKey("LanguageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_languages_languages_language_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Language"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Background", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_backgrounds_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b => + { + b.HasOne("Pf2eModel.Model.Structure.Background", "Background") + .WithMany("BackgroundBoosts") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_boosts_backgrounds_background_id"); + + b.Navigation("Background"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundItem", b => + { + b.HasOne("Pf2eModel.Model.Structure.Background", "Background") + .WithMany("BackgroundItems") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_items_backgrounds_background_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_items_entities_entity_id"); + + b.Navigation("Background"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundTraining", b => + { + b.HasOne("Pf2eModel.Model.Structure.Background", "Background") + .WithMany("BackgroundSkills") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_skills_backgrounds_background_id"); + + b.HasOne("Pf2eModel.Model.Common.Training", "Training") + .WithMany() + .HasForeignKey("TrainingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_skills_trainings_training_id"); + + b.Navigation("Background"); + + b.Navigation("Training"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Class", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Class", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_classes_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAbility", b => + { + b.HasOne("Pf2eModel.Model.Structure.Class", "Class") + .WithMany("ClassKeyAbilities") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_key_abilities_classes_class_id"); + + b.Navigation("Class"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassProgression", b => + { + b.HasOne("Pf2eModel.Model.Structure.Class", "Class") + .WithMany("ClassProgressions") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_progressions_classes_class_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("fk_class_progressions_entities_entity_id"); + + b.Navigation("Class"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassTraining", b => + { + b.HasOne("Pf2eModel.Model.Structure.Class", "Class") + .WithMany("ClassTrainings") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_trainings_classes_class_id"); + + b.HasOne("Pf2eModel.Model.Common.Training", "Training") + .WithMany() + .HasForeignKey("TrainingId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("fk_class_trainings_trainings_training_id"); + + b.Navigation("Class"); + + b.Navigation("Training"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Condition", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Condition", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_conditions_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Deity", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Deity", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deities_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityAttribute", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeityAttributes") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_attributes_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityDomain", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeityDomains") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_domains_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeitySpell", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeitySpells") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_spells_deities_deity_id"); + + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithMany() + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_spells_spells_spell_id"); + + b.Navigation("Deity"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.DeityRelation.DeityWeapon", b => + { + b.HasOne("Pf2eModel.Model.Structure.Deity", "Deity") + .WithMany("DeityWeapons") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_weapons_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Feat", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_feats_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.FeatRelation.FeatPrerequisite", b => + { + b.HasOne("Pf2eModel.Model.Structure.Feat", "Feat") + .WithMany("FeatPrerequisites") + .HasForeignKey("FeatId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_feat_prerequisites_feats_feat_id"); + + b.Navigation("Feat"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Heritage", b => + { + b.HasOne("Pf2eModel.Model.Structure.Ancestry", "Ancestry") + .WithMany("Heritages") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_heritages_ancestries_ancestry_id"); + + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Heritage", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_heritages_entities_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Spell", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Spell", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spells_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellArea", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithOne("SpellArea") + .HasForeignKey("Pf2eModel.Model.Structure.SpellRelation.SpellArea", "SpellId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_spell_areas_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDamage", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithMany("SpellDamages") + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spell_damages_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellDefense", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithMany("SpellDefenses") + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spell_defenses_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.SpellRelation.SpellRitual", b => + { + b.HasOne("Pf2eModel.Model.Structure.Spell", "Spell") + .WithOne("SpellRitual") + .HasForeignKey("Pf2eModel.Model.Structure.SpellRelation.SpellRitual", "SpellId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_spell_rituals_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Trait", b => + { + b.HasOne("Pf2eModel.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eModel.Model.Structure.Trait", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_traits_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Entity", b => + { + b.Navigation("Aliases"); + + b.Navigation("Externals"); + + b.Navigation("Sources"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Keywords.Keyword", b => + { + b.Navigation("Aliases"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Source.Source", b => + { + b.Navigation("EntitySources"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Base.Targets.ExternalTarget", b => + { + b.Navigation("EntityExternals"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Ancestry", b => + { + b.Navigation("AncestryBoosts"); + + b.Navigation("AncestryItems"); + + b.Navigation("AncestryLanguages"); + + b.Navigation("Heritages"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b => + { + b.Navigation("BackgroundBoosts"); + + b.Navigation("BackgroundItems"); + + b.Navigation("BackgroundSkills"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Class", b => + { + b.Navigation("ClassKeyAbilities"); + + b.Navigation("ClassProgressions"); + + b.Navigation("ClassTrainings"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Deity", b => + { + b.Navigation("DeityAttributes"); + + b.Navigation("DeityDomains"); + + b.Navigation("DeitySpells"); + + b.Navigation("DeityWeapons"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b => + { + b.Navigation("FeatPrerequisites"); + }); + + modelBuilder.Entity("Pf2eModel.Model.Structure.Spell", b => + { + b.Navigation("SpellArea"); + + b.Navigation("SpellDamages"); + + b.Navigation("SpellDefenses"); + + b.Navigation("SpellRitual"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Pf2eModel/Model/Pf2eDbContext.cs b/Pf2eModel/Pf2eDbContext.cs similarity index 95% rename from Pf2eModel/Model/Pf2eDbContext.cs rename to Pf2eModel/Pf2eDbContext.cs index 012d761..335d3ee 100644 --- a/Pf2eModel/Model/Pf2eDbContext.cs +++ b/Pf2eModel/Pf2eDbContext.cs @@ -112,11 +112,12 @@ public partial class Pf2eDbContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - DotEnv.Load(); + DotEnv.Load(options: new DotEnvOptions(probeForEnv: true, probeLevelsToSearch: 2)); + string databaseCnnection = EnvReader.GetStringValue("DATABASE_CONNECTION"); // optionsBuilder.LogTo(Console.WriteLine); optionsBuilder.UseSnakeCaseNamingConvention(); - optionsBuilder.UseNpgsql(EnvReader.GetStringValue("DATABASE_CONNECTION"), + optionsBuilder.UseNpgsql(databaseCnnection, builder => { builder diff --git a/Pf2eModel/Model/Pf2eDbContextModel.cs b/Pf2eModel/Pf2eDbContextModel.cs similarity index 100% rename from Pf2eModel/Model/Pf2eDbContextModel.cs rename to Pf2eModel/Pf2eDbContextModel.cs diff --git a/Pf2eModel/Pf2eModel.csproj b/Pf2eModel/Pf2eModel.csproj index d7cc940..d4d89f4 100644 --- a/Pf2eModel/Pf2eModel.csproj +++ b/Pf2eModel/Pf2eModel.csproj @@ -4,21 +4,26 @@ net8.0 enable enable + True - - Always - + + Always + - - - - - - + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + + +