diff --git a/Pf2eDataScrapper/.env.example b/Pf2eDataScrapper/.env.example index b3a6d25..d7a97be 100644 --- a/Pf2eDataScrapper/.env.example +++ b/Pf2eDataScrapper/.env.example @@ -1,4 +1,4 @@ -# Путь к папка для распаковки репозиториев обрабатываемых данных +# Путь к папке для распаковки репозиториев обрабатываемых данных DATA_DIR=D:\path\to\directory\with\repositories # Путь к месту сохранения схем diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs index 76a3553..060b0c4 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs @@ -86,7 +86,7 @@ internal abstract class AbstractProcessor(JObject input) throw new Exception("system.traits.value is expected to be an array"); } - foreach(var trait in GetTraits(traitsJson.ToArray().Select(jToken => jToken.ToString()))) + foreach(Trait trait in GetTraits(traitsJson.ToArray().Select(jToken => jToken.ToString()))) { Entity.Traits.Add(trait); } @@ -122,17 +122,12 @@ internal abstract class AbstractProcessor(JObject input) { string? value = GetOptional(path); - if (value is null) - { - return defaultValue; - } - - return DataBuilderHelper.Enum(value); + return value is null ? defaultValue : DataBuilderHelper.Enum(value); } protected Source GetSource(string name) { - Source? source = Context.Sources.Where(s => s.Name == name).FirstOrDefault(); + Source? source = Context.Sources.FirstOrDefault(s => s.Name == name); if (source != null) { @@ -151,9 +146,9 @@ internal abstract class AbstractProcessor(JObject input) protected ExternalTarget GetTarget() { - string name = "pf2e - Foundry module"; + const string name = "pf2e - Foundry module"; - ExternalTarget? target = Context.ExternalTargets.Where(s => s.Name == name).FirstOrDefault(); + ExternalTarget? target = Context.ExternalTargets.FirstOrDefault(s => s.Name == name); if (target != null) { @@ -173,9 +168,9 @@ internal abstract class AbstractProcessor(JObject input) protected IEnumerable GetTraits(IEnumerable names) { - var result = Context.Traits.Where(t => names.Contains(t.Name)).ToList(); + List result = Context.Traits.Where(t => names.Contains(t.Name)).ToList(); - foreach (var name in names) + foreach (string name in names) { if (result.Any(t => t.Name == name)) { @@ -198,9 +193,9 @@ internal abstract class AbstractProcessor(JObject input) public static string Md5(string input, bool isLowercase = false) { - using var md5 = MD5.Create(); - var byteHash = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); - var hash = BitConverter.ToString(byteHash).Replace("-", ""); + using MD5 md5 = MD5.Create(); + byte[] byteHash = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); + string hash = BitConverter.ToString(byteHash).Replace("-", ""); return (isLowercase) ? hash.ToLower() : hash; } } diff --git a/Pf2eDataScrapper/Migrations/20250416202849_Typo.Designer.cs b/Pf2eDataScrapper/Migrations/20250416202849_Typo.Designer.cs new file mode 100644 index 0000000..28a88bb --- /dev/null +++ b/Pf2eDataScrapper/Migrations/20250416202849_Typo.Designer.cs @@ -0,0 +1,2051 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Pf2eDataScrapper.Model; +using Pf2eDataScrapper.Model.Enum; + +#nullable disable + +namespace Pf2eDataScrapper.Migrations +{ + [DbContext(typeof(Pf2eDbContext))] + [Migration("20250416202849_Typo")] + partial class Typo + { + /// + 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[] { "action", "free", "reaction", "passive" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "old", "english", "old_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", "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "enum_size", new[] { "med", "tiny" }); + 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, "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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Base.Source.Source", 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("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("url") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_sources"); + + b.ToTable("sources", (string)null); + }); + + modelBuilder.Entity("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Base.Trait", 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(5); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("slug") + .HasColumnOrder(4); + + b.Property("Type") + .HasColumnType("trait_type") + .HasColumnName("type") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_traits"); + + b.ToTable("traits", (string)null); + }); + + modelBuilder.Entity("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.Action", 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("DeathNote") + .HasColumnType("boolean") + .HasColumnName("death_note") + .HasColumnOrder(5); + + b.Property("Extra") + .HasColumnType("text") + .HasColumnName("extra") + .HasColumnOrder(6); + + b.Property("Type") + .HasColumnType("action_type") + .HasColumnName("type") + .HasColumnOrder(2); + + b.HasKey("Id") + .HasName("pk_actions"); + + b.ToTable("actions", (string)null); + }); + + modelBuilder.Entity("Pf2eDataScrapper.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("enum_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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("Pf2eDataScrapper.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("DeityTraining", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Deity", null) + .WithMany() + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_training_deities_deity_id"); + + b.HasOne("Pf2eDataScrapper.Model.Common.Training", null) + .WithMany() + .HasForeignKey("SkillsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_training_trainings_skills_id"); + }); + + modelBuilder.Entity("EntityKeyword", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("EntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_keyword_entities_entities_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Base.Entity", null) + .WithMany() + .HasForeignKey("EntitiesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_trait_entities_entities_id"); + + b.HasOne("Pf2eDataScrapper.Model.Base.Trait", null) + .WithMany() + .HasForeignKey("TraitsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_trait_traits_traits_id"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.EntityAlias", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithMany("Aliases") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_aliases_entities_entity_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Keywords.KeywordAlias", b => + { + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Base.Source.EntitySource", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithMany("Sources") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_sources_entities_entity_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Base.Targets.EntityExternal", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithMany("Externals") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_entity_externals_entities_entity_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.Action", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Action", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_actions_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Ancestry", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Ancestry", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestries_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.AncestryRelation.AncestryBoost", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryBoosts") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_boosts_ancestries_ancestry_id"); + + b.Navigation("Ancestry"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.AncestryRelation.AncestryItem", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryItems") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_items_ancestries_ancestry_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.AncestryRelation.AncestryLanguage", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Ancestry", "Ancestry") + .WithMany("AncestryLanguages") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_ancestry_languages_ancestries_ancestry_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.Background", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Background", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_backgrounds_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.BackgroundRelation.BackgroundBoost", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Background", "Background") + .WithMany("BackgroundBoosts") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_boosts_backgrounds_background_id"); + + b.Navigation("Background"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.BackgroundRelation.BackgroundItem", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Background", "Background") + .WithMany("BackgroundItems") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_items_backgrounds_background_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.BackgroundRelation.BackgroundTraining", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Background", "Background") + .WithMany("BackgroundSkills") + .HasForeignKey("BackgroundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_background_skills_backgrounds_background_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.Class", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Class", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_classes_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.ClassRelation.ClassKeyAbility", b => + { + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.ClassRelation.ClassProgression", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Class", "Class") + .WithMany("ClassProgressions") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_progressions_classes_class_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.ClassRelation.ClassTraining", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Class", "Class") + .WithMany("ClassTrainings") + .HasForeignKey("ClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_class_trainings_classes_class_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.Condition", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Condition", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_conditions_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Deity", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Deity", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deities_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.DeityRelation.DeityAttribute", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Deity", "Deity") + .WithMany("DeityAttributes") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_attributes_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.DeityRelation.DeityDomain", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Deity", "Deity") + .WithMany("DeityDomains") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_domains_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.DeityRelation.DeitySpell", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Deity", "Deity") + .WithMany("DeitySpells") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_spells_deities_deity_id"); + + b.HasOne("Pf2eDataScrapper.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("Pf2eDataScrapper.Model.Structure.DeityRelation.DeityWeapon", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Deity", "Deity") + .WithMany("DeityWeapons") + .HasForeignKey("DeityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deity_weapons_deities_deity_id"); + + b.Navigation("Deity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Feat", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Feat", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_feats_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.FeatRelation.FeatPrerequisite", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Feat", "Feat") + .WithMany("FeatPrerequisites") + .HasForeignKey("FeatId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_feat_prerequisites_feats_feat_id"); + + b.Navigation("Feat"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Heritage", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Ancestry", "Ancestry") + .WithMany("Heritages") + .HasForeignKey("AncestryId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_heritages_ancestries_ancestry_id"); + + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Heritage", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_heritages_entities_id"); + + b.Navigation("Ancestry"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Spell", b => + { + b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") + .WithOne() + .HasForeignKey("Pf2eDataScrapper.Model.Structure.Spell", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spells_entities_id"); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.SpellRelation.SpellArea", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Spell", "Spell") + .WithOne("SpellArea") + .HasForeignKey("Pf2eDataScrapper.Model.Structure.SpellRelation.SpellArea", "SpellId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_spell_areas_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.SpellRelation.SpellDamage", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Spell", "Spell") + .WithMany("SpellDamages") + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spell_damages_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.SpellRelation.SpellDefense", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Spell", "Spell") + .WithMany("SpellDefenses") + .HasForeignKey("SpellId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_spell_defenses_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.SpellRelation.SpellRitual", b => + { + b.HasOne("Pf2eDataScrapper.Model.Structure.Spell", "Spell") + .WithOne("SpellRitual") + .HasForeignKey("Pf2eDataScrapper.Model.Structure.SpellRelation.SpellRitual", "SpellId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("fk_spell_rituals_spells_spell_id"); + + b.Navigation("Spell"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Entity", b => + { + b.Navigation("Aliases"); + + b.Navigation("Externals"); + + b.Navigation("Sources"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Keywords.Keyword", b => + { + b.Navigation("Aliases"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Source.Source", b => + { + b.Navigation("EntitySources"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Targets.ExternalTarget", b => + { + b.Navigation("EntityExternals"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Ancestry", b => + { + b.Navigation("AncestryBoosts"); + + b.Navigation("AncestryItems"); + + b.Navigation("AncestryLanguages"); + + b.Navigation("Heritages"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Background", b => + { + b.Navigation("BackgroundBoosts"); + + b.Navigation("BackgroundItems"); + + b.Navigation("BackgroundSkills"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Class", b => + { + b.Navigation("ClassKeyAbilities"); + + b.Navigation("ClassProgressions"); + + b.Navigation("ClassTrainings"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Deity", b => + { + b.Navigation("DeityAttributes"); + + b.Navigation("DeityDomains"); + + b.Navigation("DeitySpells"); + + b.Navigation("DeityWeapons"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Feat", b => + { + b.Navigation("FeatPrerequisites"); + }); + + modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Spell", b => + { + b.Navigation("SpellArea"); + + b.Navigation("SpellDamages"); + + b.Navigation("SpellDefenses"); + + b.Navigation("SpellRitual"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Pf2eDataScrapper/Migrations/20250416202849_Typo.cs b/Pf2eDataScrapper/Migrations/20250416202849_Typo.cs new file mode 100644 index 0000000..b39c8bf --- /dev/null +++ b/Pf2eDataScrapper/Migrations/20250416202849_Typo.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Pf2eDataScrapper.Migrations +{ + /// + public partial class Typo : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Pf2eDataScrapper/Migrations/Pf2eDbContextModelSnapshot.cs b/Pf2eDataScrapper/Migrations/Pf2eDbContextModelSnapshot.cs index 9335f42..42c3eb0 100644 --- a/Pf2eDataScrapper/Migrations/Pf2eDbContextModelSnapshot.cs +++ b/Pf2eDataScrapper/Migrations/Pf2eDbContextModelSnapshot.cs @@ -387,6 +387,47 @@ namespace Pf2eDataScrapper.Migrations b.ToTable("external_targets", (string)null); }); + modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Trait", 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(5); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasColumnOrder(2); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("slug") + .HasColumnOrder(4); + + b.Property("Type") + .HasColumnType("trait_type") + .HasColumnName("type") + .HasColumnOrder(3); + + b.HasKey("Id") + .HasName("pk_traits"); + + b.ToTable("traits", (string)null); + }); + modelBuilder.Entity("Pf2eDataScrapper.Model.Common.Frequency", b => { b.Property("Id") @@ -476,47 +517,6 @@ namespace Pf2eDataScrapper.Migrations b.ToTable("trainings", (string)null); }); - modelBuilder.Entity("Pf2eDataScrapper.Model.Common.Trait", 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(5); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("name") - .HasColumnOrder(2); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("character varying(255)") - .HasColumnName("slug") - .HasColumnOrder(4); - - b.Property("Type") - .HasColumnType("trait_type") - .HasColumnName("type") - .HasColumnOrder(3); - - b.HasKey("Id") - .HasName("pk_traits"); - - b.ToTable("traits", (string)null); - }); - modelBuilder.Entity("Pf2eDataScrapper.Model.Structure.Action", b => { b.Property("Id") @@ -1498,7 +1498,7 @@ namespace Pf2eDataScrapper.Migrations .IsRequired() .HasConstraintName("fk_entity_trait_entities_entities_id"); - b.HasOne("Pf2eDataScrapper.Model.Common.Trait", null) + b.HasOne("Pf2eDataScrapper.Model.Base.Trait", null) .WithMany() .HasForeignKey("TraitsId") .OnDelete(DeleteBehavior.Cascade) @@ -1554,7 +1554,7 @@ namespace Pf2eDataScrapper.Migrations modelBuilder.Entity("Pf2eDataScrapper.Model.Base.Targets.EntityExternal", b => { b.HasOne("Pf2eDataScrapper.Model.Base.Entity", "Entity") - .WithMany("Extrnals") + .WithMany("Externals") .HasForeignKey("EntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() @@ -1967,7 +1967,7 @@ namespace Pf2eDataScrapper.Migrations { b.Navigation("Aliases"); - b.Navigation("Extrnals"); + b.Navigation("Externals"); b.Navigation("Sources"); }); diff --git a/Pf2eDataScrapper/Model/Base/Entity.cs b/Pf2eDataScrapper/Model/Base/Entity.cs index 67e6243..e8e04c8 100644 --- a/Pf2eDataScrapper/Model/Base/Entity.cs +++ b/Pf2eDataScrapper/Model/Base/Entity.cs @@ -2,7 +2,6 @@ using Pf2eDataScrapper.Model.Base.Keywords; using Pf2eDataScrapper.Model.Base.Source; using Pf2eDataScrapper.Model.Base.Targets; -using Pf2eDataScrapper.Model.Common; using Pf2eDataScrapper.Model.Enum; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -57,5 +56,5 @@ public class Entity public virtual ICollection Sources { get; set; } = []; - public virtual ICollection Extrnals { get; set; } = []; + public virtual ICollection Externals { get; set; } = []; } diff --git a/Pf2eDataScrapper/Model/Common/Trait.cs b/Pf2eDataScrapper/Model/Base/Trait.cs similarity index 80% rename from Pf2eDataScrapper/Model/Common/Trait.cs rename to Pf2eDataScrapper/Model/Base/Trait.cs index 9097105..1f90e80 100644 --- a/Pf2eDataScrapper/Model/Common/Trait.cs +++ b/Pf2eDataScrapper/Model/Base/Trait.cs @@ -1,13 +1,12 @@ -using Pf2eDataScrapper.Model.Base; -using Pf2eDataScrapper.Model.Enum; +using Pf2eDataScrapper.Model.Enum; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -namespace Pf2eDataScrapper.Model.Common; +namespace Pf2eDataScrapper.Model.Base; public partial class Trait { - [System.ComponentModel.DataAnnotations.Key] + [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Column(Order = 1)] public int Id { get; set; } diff --git a/Pf2eDataScrapper/Model/Pf2eDbContextModel.cs b/Pf2eDataScrapper/Model/Pf2eDbContextModel.cs index 305f78b..4124aa6 100644 --- a/Pf2eDataScrapper/Model/Pf2eDbContextModel.cs +++ b/Pf2eDataScrapper/Model/Pf2eDbContextModel.cs @@ -77,7 +77,7 @@ public partial class Pf2eDbContext .OnDelete(DeleteBehavior.Cascade); // EntityExternal - entity.HasMany(e => e.Extrnals).WithOne(e => e.Entity) + entity.HasMany(e => e.Externals).WithOne(e => e.Entity) .HasForeignKey(e => e.EntityId) .OnDelete(DeleteBehavior.Cascade); });