diff --git a/.gitignore b/.gitignore index f1ff9d6..3057038 100644 --- a/.gitignore +++ b/.gitignore @@ -363,4 +363,6 @@ MigrationBackup/ FodyWeavers.xsd +.vscode + /Pf2eDataScrapper/.env diff --git a/dbml/schema.dbml b/dbml/schema.dbml new file mode 100644 index 0000000..9ce29fe --- /dev/null +++ b/dbml/schema.dbml @@ -0,0 +1,349 @@ +// https://dbml.dbdiagram.io/docs + +// Entity +Table entity { + id int [pk] + name varchar [not null, note: "{*}.name"] + img varchar(100) [note: "{*}.img"] + type entity_type [not null] + slug varchar + rarity entity_rarity [not null, default: "common", note: "{*}.system.rarity"] +} +Enum entity_type { + feat +} +Enum entity_rarity { + common + uncommon + rare +} + +// Alias +Table entity_aliases { + id int [pk, increment] + entity_id int [ref: > entity.id] + alias varchar [not null] + type alias_type [not null] +} +Enum alias_type { + old + english + hobby +} + +// Keywords +Table keyword { + id int [pk, increment] + +} +Table entity_keywords { + entity_id int [ref: > entity.id] + keyword_id int [ref: > keyword.id] +} + +// Sources +TableGroup source_group { + source + entity_sources +} +Table source { + id int [pk, increment] + name varchar + url varchar +} +Table entity_sources { + entity_id int [ref: > entity.id] + source_id int [ref: > source.id] + suffix varchar [default: ""] +} + +// External links +TableGroup external_group { + external_target + entity_external +} +Table external_target { + id int + name varchar + icon varchar +} +Table entity_external { + entity_id int [ref: > entity.id] + target_id int [ref: > external_target.id] + path varchar +} + +// Traits +TableGroup trait_group { + trait + entity_traits +} +Table trait { + id int [pk] + name varchar [not null] + description text +} +Table entity_traits { + entity_id int [ref: > entity.id] + trait_id int [ref: > trait.id] +} + +// ---------------------------------------------- + +// Action +Table action { + id int [pk, ref: - entity.id] + + description text [not null, note: "{}.system.description"] + + type action_type [not null, note: "{}.system.actionType.value"] + actions int [null, note: "{}.system.actions?.value"] + category action_category [null, note: "{}.system.category"] // Нет у 81 объекта + death_note bool [null, note: "{}.system.deathNote"] + + Note: '''{} = Item.action + + Перенаправление: + {}.system.publication -> entity_sources + {}.system.traits -> entity_traits + + {}.system.frequency -> ??? Возможно нужно на общую frequency + + Рассмотреть: + {}.system.selfEffect + {}.system.duration + {}.system.start - .value всегда 103462347 + {}.system.target + + Не использованы поля: + {}.system.subfeatures - пишем в описании пока что, потом подключение таблицы + {}.system.actionCategory - всегда пробел??? + ''' +} +Enum action_type { + action + free + reaction + passive +} +Enum action_category { + offensive + defensive + interaction + familiar +} + +// Ancestery +Table ancestry { + id int [pk, ref: - entity.id] + + description text [not null, note: "{}.system.description"] + + hp int [not null, note: "{}.system.hp"] + reach int [not null, note: "{}.system.reach"] + size ancestry_size [not null, note: "{}.system.size"] + speed int [not null, note: "{}.system.speed"] + vision ancestry_vision [not null, note: "{}.system.vision"] + + Note: '''{} = Item.ancestry + + Перенаправление: + {}.system.publication -> entity_sources + {}.system.traits -> entity_traits + + Рассмотреть: + {}.system.boosts + {}.system.flaws + {}.system.items - TODO добавить в определение dict-типа + {}.system.lanuages + + Не использованы поля: + {}.system.additionalLanguages + ''' +} +Enum ancestry_size { + med + lanuages + system + tiny +} +Enum ancestry_vision { + normal + low-light-vision + darkvision +} + +// Armor +Table armor { + id int [pk, ref: - entity.id] + + description text [not null, note: "{}.system.description"] + + ac_bonus int [not null, note: "{}.system.acBonus"] + strength int [null, note: "{}.system.strength"] + check_penalty int [not null, note: "{}.system.checkPenalty"] + dex_cap int [not null, note: "{}.system.dexCap"] + speed_penalty int [not null, note: "{}.system.speedPenalty"] + + bulk float [not null, note: "{}.system.bulk"] + category armor_category [not null, note: "{}.system.category"] + group armor_group [null, note: "{}.system.group"] // 16 без группы + level int [not null, note: "{}.system.level.value"] + price int [not null, note: "price({}.system.price.value)"] + size armor_size [not null, note: "{}.system.size"] + + Note: '''{} = Item.armor + + Перенаправление: + {}.system.publication -> entity_sources + {}.system.traits -> entity_traits + + Рассмотреть: + {}.system.base_item - возможно связь на себя + {}.system.material + {}.system.runes + {}.system.specific + + Не использованы поля: + {}.system.containerId - пустое + {}.system.hardness - всегда 0 + {}.system.hp - всегда 0 + {}.system.quantity - всегда 1 + + ''' +} +Enum armor_category { + light + heavy + medium + light-barding + heavy-barding + unarmored +} +Enum armor_group { + leather + plate + wood + chain + cloth + skeletal + composite +} +Enum armor_size { + med + lg +} + +// Background +Table background { + id int [pk, ref: - entity.id] + + description text [not null, note: "{}.system.description"] + + Note: '''{} = Item.background + + Перенаправление: + {}.system.publication -> entity_sources + {}.system.traits -> entity_traits + + Рассмотреть: + {}.system.boosts + + Не использованы поля: + ''' +} + + + + + + + + + +// Feat +Table feat { + id int [pk, ref: - entity.id] + + description text [not null, note: "{}.system.description"] + + action_type feat_action_type [note: "{}.system.actionType.value"] + actions int [null, note: "{}.system.actions?.value"] + category feat_category [not null, note: "{}.system.category"] + level int [not null, note: "{}.system.level.value"] + level_taker int [null, note: "{}.system.level.taken"] // Всего 2 значения: 1, 2 + max_takable int [null, note: "{}.system.level.maxTakable"] + location varchar(12) [null, note: "{}.system.level.location"] + only_level_1 bool [null, note: "{}.system.onlyLevel1"] + + Note: '''{} = Item.feat + + Перенаправление: + {}.system.publication -> entity_sources + {}.system.traits -> entity_traits + {}.system.frequency -> feat_frequency + + Рассмотреть: + {}.system.prerequisites + {}.system.selfEffect + {}.system.duration + {}.system.start - .value всегда 103462347 + {}.system.target + + Не использованы поля: + {}.system.subfeatures - пишем в описании пока что, потом подключение таблицы + {}.system.actionCategory - всегда пробел??? + ''' +} +Enum feat_action_type { + passive + action + reaction + free +} +Enum feat_category { + ancestryfeature + classfeature + calling + class + skill + general + ancestry + bonus + deityboon + curse + pfsboon +} + +Table feat_frequency { + feat_id int [pk, ref: > feat.id] + max int [not null, note: "{Item.feat}.system.frequency.max"] + per int [not null, note: "{Item.feat}.system.frequency.per"] + value int [null, note "{Item.feat}.system.frequency.value - что это вообще?!"] +} + + + + + + + + +/* +Table template { + id int [pk, ref: - entity.id] + + description text [not null, note: "{}.system.description"] + + Note: '''{} = Item. + + Перенаправление: + {}.system.publication -> entity_sources + {}.system.traits -> entity_traits + + Рассмотреть: + + Не использованы поля: + ''' +} +*/ \ No newline at end of file