Создание документации

This commit is contained in:
2025-06-01 19:57:59 +04:00
parent 8ff9f6bbc6
commit c9c92a2b54
1222 changed files with 21314 additions and 74 deletions
@@ -13,7 +13,7 @@ using Pf2eModel.Model.Enum;
namespace Pf2eModel.Migrations
{
[DbContext(typeof(Pf2eDbContext))]
[Migration("20250522130215_1")]
[Migration("20250601111002_1")]
partial class _1
{
/// <inheritdoc />
@@ -884,7 +884,7 @@ namespace Pf2eModel.Migrations
b.ToTable("classes", (string)null);
});
modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAbility", b =>
modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAttribute", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
@@ -2185,7 +2185,7 @@ namespace Pf2eModel.Migrations
b.Navigation("Entity");
});
modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAbility", b =>
modelBuilder.Entity("Pf2eModel.Model.Structure.ClassRelation.ClassKeyAttribute", b =>
{
b.HasOne("Pf2eModel.Model.Structure.Class", "Class")
.WithMany("ClassKeyAbilities")
+3
View File
@@ -4,6 +4,9 @@ using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Base;
/// <summary>
/// Алиас сущности.
/// </summary>
public class EntityAlias
{
/// <summary>
@@ -24,8 +24,12 @@ public class EntityExternal
[Comment("Идентификатор цели")]
public int TargetId { get; set; }
/// <summary>
/// Идентификатор элемента по ссылке.
/// </summary>
[Column(Order = 3)]
[MaxLength(255)]
[Comment("Идентификатор элемента в ссылке")]
public string? ExternalId { get; set; } = null;
/// <summary>
+12 -6
View File
@@ -7,21 +7,27 @@ namespace Pf2eModel.Model.Common.I18n;
/// </summary>
public enum LocaleType
{
/// <summary>
/// Английский язык (основной).
/// </summary>
[Description("en")]
English,
[Description("en.legacy")]
LegacyEnglish,
/// <summary>
/// Русский язык.
/// </summary>
[Description("ru")]
Russian,
[Description("ru.legacy")]
Legacy,
/// <summary>
/// Русский язык (вариант HobbyGames).
/// </summary>
[Description("ru.hobby")]
Hobby,
/// <summary>
/// Другой язык.
/// </summary>
[Description("other")]
Other,
}
+36
View File
@@ -19,39 +19,75 @@ public enum ActionCategory
[PgName("archetype")]
Archetype,
/// <summary>
/// Дествие навыка.
/// </summary>
[PgName("skill-action")]
SkillAction,
/// <summary>
/// Действие классовой способности.
/// </summary>
[PgName("class-feature")]
ClassFeature,
/// <summary>
/// Действие классовой черты.
/// </summary>
[PgName("class-feat")]
ClassFeat,
/// <summary>
/// Действие атаки.
/// </summary>
[PgName("offensive")]
Offensive,
/// <summary>
/// Действие защиты.
/// </summary>
[PgName("defensive")]
Defensive,
/// <summary>
/// Действие взаимодействия.
/// </summary>
[PgName("interaction")]
Interaction,
/// <summary>
/// Действие фамильяра.
/// </summary>
[PgName("familiar")]
Familiar,
/// <summary>
/// Действие тактики армии.
/// </summary>
[PgName("army_tactic")]
ArmyTactic,
/// <summary>
/// Действие войны армии.
/// </summary>
[PgName("army_war_action")]
ArmyWarAction,
/// <summary>
/// Активность королевства.
/// </summary>
[PgName("kingdom_activity")]
KingdomActivity,
/// <summary>
/// Действие черты королевства.
/// </summary>
[PgName("kingdom_feat")]
KingdomFeat,
/// <summary>
/// Действие особенности королевства.
/// </summary>
[PgName("kingdom_feature")]
KingdomFeature,
}
+63
View File
@@ -7,66 +7,129 @@ namespace Pf2eModel.Model.Enum;
/// </summary>
public enum ActionEnum
{
/// <summary>
/// Неизвестное количество действий.
/// </summary>
[PgName("unknown")]
Unknown,
/// <summary>
/// Одно действие.
/// </summary>
[PgName("1")]
SingleAction,
/// <summary>
/// Два действия.
/// </summary>
[PgName("2")]
TwoActions,
/// <summary>
/// Три действия.
/// </summary>
[PgName("3")]
ThreeActions,
/// <summary>
/// Реакция.
/// </summary>
[PgName("reaction")]
Reaction,
/// <summary>
/// Свободное действие.
/// </summary>
[PgName("free")]
FreeAction,
/// <summary>
/// Пассивное действие.
/// </summary>
[PgName("passive")]
Passive,
/// <summary>
/// Иное количество действий, не указанное в перечислении.
/// </summary>
[PgName("other")]
Other,
/// <summary>
/// От одного до трёх действий.
/// </summary>
[PgName("1-3")]
SingleActionToThreeActions,
/// <summary>
/// От одного до двух действий.
/// </summary>
[PgName("1-2")]
SingleActionToTwoActions,
/// <summary>
/// От двух до трёх действий.
/// </summary>
[PgName("2-3")]
TwoActionsToThreeActions,
/// <summary>
/// От двух действий до двух раундов.
/// </summary>
[PgName("2/2 rounds")]
TwoActionsToTwoRounds,
/// <summary>
/// Реакция или одно действие.
/// </summary>
[PgName("reaction/1")]
ReactionOrOneAction,
/// <summary>
/// Реакция или два действия.
/// </summary>
[PgName("reaction/2")]
ReactionOrTwoAction,
/// <summary>
/// Реакция или три действия.
/// </summary>
[PgName("reaction/3")]
ReactionOrThreeAction,
/// <summary>
/// Свободное действие или одно действие.
/// </summary>
[PgName("free/1")]
FreeActionOrOneAction,
/// <summary>
/// Одная минута.
/// </summary>
[PgName("1 minute")]
OneMinute,
/// <summary>
/// Пять минут.
/// </summary>
[PgName("5 minutes")]
FiveMinutes,
/// <summary>
/// Десять минут.
/// </summary>
[PgName("10 minutes")]
TenMinutes,
/// <summary>
/// Тридцать минут.
/// </summary>
[PgName("30 minutes")]
ThirtyMinutes,
/// <summary>
/// Один час.
/// </summary>
[PgName("1 hour")]
OneHour,
}
+45
View File
@@ -2,47 +2,92 @@
namespace Pf2eModel.Model.Enum;
/// <summary>
/// Категория черты.
/// </summary>
public enum FeatCategory
{
/// <summary>
/// Черта, которая не относится ни к одной из категорий.
/// </summary>
[PgName("uncategorized")]
Uncategorized,
/// <summary>
/// Черта наследия. Возможная коллизия между <see cref="Ancestry"/> и <see cref="AncestryFeature"/>.
/// </summary>
[PgName("ancestry")]
Ancestry,
/// <summary>
/// Черта наследия. Возможная коллизия между <see cref="Ancestry"/> и <see cref="AncestryFeature"/>.
/// </summary>
[PgName("ancestry-feature")]
AncestryFeature,
/// <summary>
/// Черта архетипа.
/// </summary>
[PgName("archetype")]
Archetype,
/// <summary>
/// Черта мифического призвания.
/// </summary>
[PgName("calling")]
Calling,
/// <summary>
/// Черта класса. Возможная коллизия между <see cref="ClassFeature"/> и <see cref="Class"/>.
/// </summary>
[PgName("class")]
Class,
/// <summary>
/// Черта класса. Возможная коллизия между <see cref="Class"/> и <see cref="ClassFeature"/>.
/// </summary>
[PgName("class-feature")]
ClassFeature,
/// <summary>
/// Черта навыка.
/// </summary>
[PgName("skill")]
Skill,
/// <summary>
/// Общая черта.
/// </summary>
[PgName("general")]
General,
/// <summary>
/// Бонусная черта.
/// </summary>
[PgName("bonus")]
Bonus,
/// <summary>
/// Божественный дар.
/// </summary>
[PgName("deityboon")]
Deityboon,
/// <summary>
/// Проклятие.
/// </summary>
[PgName("curse")]
Curse,
/// <summary>
/// Дар сообщества Pathfinder Society.
/// </summary>
[PgName("pfsboon")]
Pfsboon,
/// <summary>
/// Черта кампании.
/// </summary>
[PgName("campaign-feature")]
CampaignFeature,
}
@@ -1,25 +1,47 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
namespace Pf2eModel.Model.Structure.AncestryRelation;
/// <summary>
/// Элемент набора повышений атрибутов для родословной.
/// </summary>
public class AncestryBoost
{
/// <summary>
/// Идентификатор элемента.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
public int Id { get; set; }
/// <summary>
/// Идентификатор родословной, к которой относится этот элемент.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор родословной")]
public int AncestryId { get; set; }
/// <summary>
/// Указывает, является ли этот элемент повышением атрибута. Если <c>false</c> - это снижение атрибута.
/// </summary>
[Column(Order = 3)]
[Comment("Флаг повышения/снижения")]
public bool Boost { get; set; } = true;
/// <summary>
/// Значение атрибута, которое повышается или понижается в этом элементе набора повышений атрибутов.
/// </summary>
[Column(Order = 4)]
[Comment("Значение атрибута")]
public Enum.AttributeValues Value { get; set; }
/// <summary>
/// Родословная, к которой относится этот элемент набора повышений атрибутов.
/// </summary>
[JsonIgnore]
public Ancestry Ancestry { get; set; } = null!;
}
@@ -4,19 +4,40 @@ using Pf2eModel.Model.Base;
namespace Pf2eModel.Model.Structure.AncestryRelation;
/// <summary>
/// Связь между родословной и сущностью.
/// </summary>
[PrimaryKey(nameof(AncestryId), nameof(ItemId))]
public class AncestryItem
{
/// <summary>
/// Идентификатор родословной.
/// </summary>
[Column(Order = 1)]
[Comment("Идентификатор родословной")]
public int AncestryId { get; set; }
/// <summary>
/// Идентификатор сущности, связанной с родословной.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор связанной сущности")]
public int ItemId { get; set; }
/// <summary>
/// Уровень сущности в родословной.
/// </summary>
[Column(Order = 3)]
[Comment("Уровень сущности в родословной")]
public int Level { get; set; }
/// <summary>
/// Родословная, к которой относится сущность.
/// </summary>
public Ancestry Ancestry { get; set; } = null!;
/// <summary>
/// Сущность, связанная с родословной.
/// </summary>
public Entity Item { get; set; } = null!;
}
@@ -3,19 +3,40 @@ using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Structure.AncestryRelation;
/// <summary>
/// Связь между родословной и языком.
/// </summary>
[PrimaryKey(nameof(AncestryId), nameof(LanguageId))]
public class AncestryLanguage
{
/// <summary>
/// Идентификатор родословной, к которой относится язык.
/// </summary>
[Column(Order = 1)]
[Comment("Идентификатор родословной")]
public int AncestryId { get; set; }
/// <summary>
/// Идентификатор языка, связанного с родословной.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор связанного языка")]
public int LanguageId { get; set; }
/// <summary>
/// Является ли язык дополнительным для родословной.
/// </summary>
[Column(Order = 3)]
[Comment("Флаг дополнительного")]
public bool IsAdditional { get; set; }
/// <summary>
/// Родословная, к которой относится язык.
/// </summary>
public Ancestry Ancestry { get; set; } = null!;
/// <summary>
/// Язык, связанный с родословной.
/// </summary>
public Language Language { get; set; } = null!;
}
@@ -2,10 +2,21 @@
namespace Pf2eModel.Model.Structure.ArchetypeRelation;
/// <summary>
/// Связь между архетипом и его чертами.
/// </summary>
[PrimaryKey(nameof(ArchetypeId), nameof(FeatId))]
public class ArchetypeFeats
{
/// <summary>
/// Идентификатор архетипа, к которому относится черта.
/// </summary>
[Comment("Идентификатор архетипа")]
public int ArchetypeId { get; set; }
/// <summary>
/// Идентификатор черты, связанной с архетипом.
/// </summary>
[Comment("Идентификатор черты")]
public int FeatId { get; set; }
}
@@ -1,23 +1,42 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.BackgroundRelation;
/// <summary>
/// Элемент набора атрибутов для предыстории.
/// </summary>
public class BackgroundBoost
{
/// <summary>
/// Идентификатор элемента набора атрибутов для предыстории.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор предыстории, к которой относится этот элемент набора атрибутов.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор предыстории")]
public int BackgroundId { get; set; }
/// <summary>
/// Атрибут, к которому относится этот элемент набора атрибутов для предыстории.
/// </summary>
[Column(Order = 3)]
[Comment("Атрибут")]
public AttributeValues Attribute { get; set; }
/// <summary>
/// Предыстория, к которой относится этот элемент набора атрибутов.
/// </summary>
[JsonIgnore]
public Background Background { get; set; } = null!;
}
@@ -5,20 +5,40 @@ using Pf2eModel.Model.Base;
namespace Pf2eModel.Model.Structure.BackgroundRelation;
/// <summary>
/// Элемент предыстории, который может быть способностью, навыком или другим элементом, связанным с предысторией.
/// </summary>
[PrimaryKey(nameof(BackgroundId), nameof(EntityId))]
public class BackgroundItem
{
/// <summary>
/// Идентификатор элемента предыстории.
/// </summary>
[Column(Order = 1)]
[Comment("Идентификатор")]
public int BackgroundId { get; set; }
/// <summary>
/// Идентификатор сущности, связанной с предысторией.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор сущности")]
public int EntityId { get; set; }
/// <summary>
/// Уровень элемента предыстории, если применимо. Может быть null, если уровень не указан или не применим.
/// </summary>
[Column(Order = 3)]
public int? Level { get; set; }
/// <summary>
/// Предыстория, к которой относится сущность.
/// </summary>
[JsonIgnore]
public Background Background { get; set; } = null!;
/// <summary>
/// Сущность, связанная с предысторией.
/// </summary>
public Entity Entity { get; set; } = null!;
}
@@ -1,29 +1,55 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Pf2eModel.Model.Common;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.BackgroundRelation;
/// <summary>
/// Элемент набора связей между предысторией и тренируемым навыком.
/// </summary>
public class BackgroundTraining
{
/// <summary>
/// Идентификатор элемента набора связей между предысторией и тренируемым навыком.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор предыстории, к которой относится тренировка.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор предыстории")]
public int BackgroundId { get; set; }
/// <summary>
/// Идентификатор тренируемого навыка.
/// </summary>
[Column(Order = 3)]
[Comment("Идентификатор тренируемого навыка")]
public int TrainingId { get; set; }
/// <summary>
/// Ранг тренировки, который получает персонаж при выборе данной предыстории.
/// </summary>
[Column(Order = 4)]
[Comment("Ранг тренировки")]
public TrainingRank Rank { get; set; }
/// <summary>
/// Предыстория, к которой относится тренировка.
/// </summary>
[JsonIgnore]
public Background Background { get; set; } = null!;
/// <summary>
/// Тренируемый навык, который получает персонаж при выборе данной предыстории.
/// </summary>
public Training Training { get; set; } = null!;
}
+1 -1
View File
@@ -54,7 +54,7 @@ public class Class : IEntity
/// <summary>
/// Аттрибуты класса.
/// </summary>
public virtual ICollection<ClassKeyAbility> ClassKeyAbilities { get; set; } = [];
public virtual ICollection<ClassKeyAttribute> ClassKeyAbilities { get; set; } = [];
/// <summary>
/// Прогрессия класса.
@@ -1,23 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.ClassRelation;
public class ClassKeyAbility
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
public int Id { get; set; }
[Column(Order = 2)]
public int ClassId { get; set; }
[Column(Order = 3)]
public AttributeValues Value { get; set; }
[JsonIgnore]
public Class Class { get; set; } = null!;
}
@@ -0,0 +1,42 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.ClassRelation;
/// <summary>
/// Набор ключевых атрибутов класса.
/// </summary>
public class ClassKeyAttribute
{
/// <summary>
/// Идентификатор ключевого атрибута класса.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор класса, к которому относится ключевой атрибут.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор класса")]
public int ClassId { get; set; }
/// <summary>
/// Ключевой атрибут класса.
/// </summary>
[Column(Order = 3)]
[Comment("Атрибут")]
public AttributeValues Value { get; set; }
/// <summary>
/// Класс, к которому относится ключевой атрибут.
/// </summary>
[JsonIgnore]
public Class Class { get; set; } = null!;
}
@@ -1,32 +1,62 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Pf2eModel.Model.Base;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.ClassRelation;
/// <summary>
/// Элемент прогрессии класса.
/// </summary>
public class ClassProgression
{
/// <summary>
/// Идентификатор прогрессии класса.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор класса, к которому относится элемент прогрессии.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор класса")]
public int ClassId { get; set; }
[Column(Order = 31)]
/// <summary>
/// Уровень класса, на котором элемент прогрессии доступен.
/// </summary>
[Column(Order = 3)]
[Comment("Уровень класса")]
public int Level { get; set; }
/// <summary>
/// Тип элемента прогрессии класса.
/// </summary>
[Column(Order = 4)]
[Comment("Тип элемента прогрессии класса")]
public ClassProgressionType Type { get; set; }
/// <summary>
/// Идентификатор сущности, связанной с элементом прогрессии класса (например, навык, атрибут и т.д.).
/// </summary>
[Column(Order = 5)]
[Comment("Идентификатор сущности")]
public int? EntityId { get; set; }
/// <summary>
/// Класс, к которому относится элемент прогрессии.
/// </summary>
[JsonIgnore]
public Class Class { get; set; } = null!;
/// <summary>
/// Сущность, связанная с элементом прогрессии класса (например, навык, атрибут и т.д.).
/// </summary>
public Entity? Entity { get; set; }
}
@@ -1,29 +1,55 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Pf2eModel.Model.Common;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.ClassRelation;
/// <summary>
/// Набор элементов, связывающий класс и тренируемый навык.
/// </summary>
public class ClassTraining
{
/// <summary>
/// Идентификатор набора элементов, связывающий класс и тренируемый навык.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор класса, к которому относится тренировка.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор класса")]
public int ClassId { get; set; }
/// <summary>
/// Идентификатор тренируемого навыка, к которому относится тренировка.
/// </summary>
[Column(Order = 3)]
[Comment("Идентификатор тренируемого навыка")]
public int? TrainingId { get; set; }
/// <summary>
/// Ранг тренировки, определяющий уровень владения навыком.
/// </summary>
[Column(Order = 4)]
[Comment("Ранг тренировки")]
public TrainingRank Rank { get; set; }
/// <summary>
/// Класс, к которому относится тренировка.
/// </summary>
[JsonIgnore]
public Class Class { get; set; } = null!;
/// <summary>
/// Тренируемый навык, к которому относится тренировка.
/// </summary>
public Training? Training { get; set; }
}
@@ -2,10 +2,19 @@
namespace Pf2eModel.Model.Structure.ClassRelation;
/// <summary>
/// Элемент, связывающий сущность с подклассом.
/// </summary>
[PrimaryKey(nameof(SubclassId), nameof(EntityId))]
public class SubclassProvidedEntities
{
/// <summary>
/// Идентификатор подкласса, к которому относится сущность.
/// </summary>
public int SubclassId { get; set; }
/// <summary>
/// Идентификатор сущности, предоставляемой подклассом.
/// </summary>
public int EntityId { get; set; }
}
@@ -1,27 +1,53 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Common;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.ClassRelation;
/// <summary>
/// Связь между подклассами и тренировками.
/// </summary>
public class SubclassTrainings
{
/// <summary>
/// Идентификатор связи между подклассом и тренировкой.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор связи")]
public int Id { get; set; }
/// <summary>
/// Идентификатор подкласса, к которому относится тренировка.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор подкласса")]
public int SubclassId { get; set; }
/// <summary>
/// Идентификатор тренировки, связанной с подклассом.
/// </summary>
[Column(Order = 3)]
[Comment("Идентификатор тренировки")]
public int TrainingId { get; set; }
/// <summary>
/// Ранг тренировки для данного подкласса.
/// </summary>
[Column(Order = 4)]
[Comment("Ранг тренировки")]
public TrainingRank Rank { get; set; } = TrainingRank.Trained;
/// <summary>
/// Подкласс, к которому относится тренировка.
/// </summary>
public Subclass Subclass { get; set; } = null!;
/// <summary>
/// Тренировка, связанная с подклассом.
/// </summary>
public Training Training { get; set; } = null!;
}
@@ -4,14 +4,28 @@ using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.DeityRelation;
/// <summary>
/// Элемент отношения божества и атрибута.
/// </summary>
[PrimaryKey(nameof(DeityId), nameof(Attribute))]
public class DeityAttribute
{
/// <summary>
/// Идентификатор божества.
/// </summary>
[Column(Order = 1)]
[Comment("Идентификатор божества")]
public int DeityId { get; set; }
/// <summary>
/// Атрибут божества.
/// </summary>
[Column(Order = 2)]
[Comment("Атрибут божества")]
public AttributeValues Attribute { get; set; }
/// <summary>
/// Божество, к которому относится атрибут.
/// </summary>
public Deity Deity { get; set; } = null!;
}
@@ -1,24 +1,46 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Structure.DeityRelation;
/// <summary>
/// Элемент отношения божества и домена.
/// </summary>
public class DeityDomain
{
/// <summary>
/// Идентификатор отношения божества и домена.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор божества, к которому относится домен.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор божества")]
public int DeityId { get; set; }
/// <summary>
/// Флаг, указывающий, является ли домен основным для божества.
/// </summary>
[Column(Order = 3)]
[Comment("Флаг основного домена")]
public bool IsPrimary { get; set; }
/// <summary>
/// Значение домена божества, например, "Свет", "Тьма" и т.д.
/// </summary>
[Column(Order = 4)]
[MaxLength(Pf2eDbContext.NameLength)]
public string Value { get; set; } = null!;
/// <summary>
/// Божество, к которому относится домен.
/// </summary>
public virtual Deity Deity { get; set; } = null!;
}
@@ -1,25 +1,51 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Structure.DeityRelation;
/// <summary>
/// Связь божества и заклинания.
/// </summary>
public class DeitySpell
{
/// <summary>
/// Идентификатор связи божества и заклинания.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор божества, к которому относится заклинание.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор божества")]
public int DeityId { get; set; }
/// <summary>
/// Уровень заклинания.
/// </summary>
[Column(Order = 3)]
[Comment("Уровень заклинания")]
public int Level { get; set; }
/// <summary>
/// Идентификатор заклинания, связанного с божеством.
/// </summary>
[Column(Order = 4)]
[Comment("Идентификатор заклинания")]
public int SpellId { get; set; }
/// <summary>
/// Божество, к которому относится заклинание.
/// </summary>
public virtual Deity Deity { get; set; } = null!;
/// <summary>
/// Заклинание, связанное с божеством.
/// </summary>
public virtual Spell Spell { get; set; } = null!;
}
@@ -1,21 +1,40 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Structure.DeityRelation;
/// <summary>
/// Связь божества с оружием.
/// </summary>
public class DeityWeapon
{
/// <summary>
/// Идентификатор связи божества с оружием.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор божества, к которому относится оружие.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор божества")]
public int DeityId { get; set; }
/// <summary>
/// Название оружия, связанного с божеством. Будет изменено на идентификатор оружия в будущем, когда будет реализована система оружия.
/// </summary>
[Column(Order = 3)]
[MaxLength(Pf2eDbContext.NameLength)]
[Comment("Название оружия")]
public string Weapon { get; set; } = null!;
/// <summary>
/// Божество, к которому относится оружие.
/// </summary>
public virtual Deity Deity { get; set; } = null!;
}
@@ -1,21 +1,40 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Structure.FeatRelation;
/// <summary>
/// Предварительное требование для черты.
/// </summary>
public class FeatPrerequisite
{
/// <summary>
/// Идентификатор предварительного требования для чериы.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор черты, к которой относится предварительное требование.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор черты")]
public int FeatId { get; set; }
/// <summary>
/// Предварительное требование для черты.
/// </summary>
[Column(Order = 3)]
[MaxLength(255)]
[Comment("Предварительное требование")]
public string Value { get; set; } = null!;
/// <summary>
/// Черта, к которой относится предварительное требование.
/// </summary>
public virtual Feat Feat { get; set; } = null!;
}
@@ -1,23 +1,42 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Common.I18n;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.RitualRelation;
/// <summary>
/// Область действия ритуала.
/// </summary>
public class RitualArea
{
/// <summary>
/// Идентификатор ритуала, к которому относится область действия.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column(Order = 1)]
[Comment("Идентификатор ритуала")]
public int RitualId { get; set; }
/// <summary>
/// Описание области действия ритуала.
/// </summary>
[Column(Order = 2)]
[MaxLength(255)]
[Comment("Описание области действия ритуала")]
public LocaleString? Details { get; set; }
/// <summary>
/// Тип области действия ритуала.
/// </summary>
[Column(Order = 3)]
[Comment("Тип области действия ритуала")]
public SpellAreaType Type { get; set; }
/// <summary>
/// Ритуал, к которому относится область действия.
/// </summary>
public virtual Ritual Ritual { get; set; } = null!;
}
@@ -1,34 +1,68 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Common;
using Pf2eModel.Model.Common.I18n;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.RitualRelation;
/// <summary>
/// Проверка для ритуала.
/// </summary>
public class RitualCheck
{
/// <summary>
/// Идентификатор проверки ритуала.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор ритуала, к которому относится проверка.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор ритуала")]
public int RitualId { get; set; }
public Ritual Ritual { get; set; } = null!;
/// <summary>
/// Идентификатор тренировки, связанной с проверкой ритуала.
/// </summary>
[Column(Order = 3)]
[Comment("Идентификатор тренировки")]
public int? TrainingId { get; set; }
public Training? Training { get; set; } = null!;
/// <summary>
/// Дополнение к проверке.
/// </summary>
[Column(Order = 4)]
[Comment("Дополнение к проверке")]
public LocaleString? TrainingString { get; set; } = null;
/// <summary>
/// Ранг тренировки, связанной с проверкой ритуала.
/// </summary>
[Column(Order = 5)]
[Comment("Ранг тренировки")]
public TrainingRank Rank { get; set; }
/// <summary>
/// Флаг, указывающий, является ли проверка основной для ритуала.
/// </summary>
[Column(Order = 6)]
[Comment("Флаг основной проверки")]
public bool IsPrimary { get; set; }
/// <summary>
/// Ритуал, к которому относится проверка.
/// </summary>
public Ritual Ritual { get; set; } = null!;
/// <summary>
/// Тренировка, связанная с проверкой ритуала.
/// </summary>
public Training? Training { get; set; } = null!;
}
@@ -1,26 +1,49 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Common.I18n;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.SpellRelation;
/// <summary>
/// Область заклинания.
/// </summary>
public class SpellArea
{
/// <summary>
/// Идентификатор области заклинания.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор заклинания, к которому относится область.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор заклинания")]
public int SpellId { get; set; }
/// <summary>
/// Описание области заклинания.
/// </summary>
[Column(Order = 3)]
[MaxLength(255)]
[Comment("Описание области заклинания")]
public LocaleString? Details { get; set; }
/// <summary>
/// Тип области заклинания.
/// </summary>
[Column(Order = 4)]
[Comment("Тип области заклинания")]
public SpellAreaType Type { get; set; }
/// <summary>
/// Заклинание, к которому относится область.
/// </summary>
public virtual Spell Spell { get; set; } = null!;
}
@@ -1,43 +1,86 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Structure.SpellRelation;
/// <summary>
/// Урон заклинания.
/// </summary>
public class SpellDamage
{
/// <summary>
/// Идентификатор урона заклинания.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор урона заклинания")]
public int Id { get; set; }
/// <summary>
/// Идентификатор заклинания, к которому относится урон.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор заклинания")]
public int SpellId { get; set; }
/// <summary>
/// Уровень заклинания, к которому относится урон.
/// </summary>
[Column(Order = 3)]
[MaxLength(255)]
[Comment("Уровень заклинания")]
public string Key { get; set; } = null!;
/// <summary>
/// Применяется ли модификатор к урону заклинания.
/// </summary>
[Column(Order = 4)]
[Comment("Применяется модификатор?")]
public bool? ApplyMod { get; set; }
/// <summary>
/// Категория урона заклинания, если применимо.
/// </summary>
[Column(Order = 5)]
[Comment("Категория урона заклинания")]
public SpellDamageCategory? Category { get; set; }
/// <summary>
/// Формула урона заклинания.
/// </summary>
[Column(Order = 6)]
[MaxLength(255)]
[Comment("Формула урона заклинания")]
public string Formula { get; set; } = null!;
/// <summary>
/// Тип урона заклинания.
/// </summary>
[Column(Order = 7)]
[Comment("Тип урона заклинания")]
public SpellDamageKinds Kinds { get; set; }
/// <summary>
/// Материалы, необходимые для заклинания, если применимо.
/// </summary>
[Column(Order = 8)]
[MaxLength(255)]
[Comment("Материалы для заклинания")]
public string? Materials { get; set; }
/// <summary>
/// Тип урона заклинания, если применимо (например, "fire", "cold" и т.д.).
/// </summary>
[Column(Order = 9)]
[MaxLength(255)]
[Comment("Тип урона заклинания")]
public string Type { get; set; } = null!;
/// <summary>
/// Заклинание, к которому относится урон.
/// </summary>
public virtual Spell Spell { get; set; } = null!;
}
@@ -1,27 +1,52 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Pf2eModel.Model.Structure.SpellRelation;
/// <summary>
/// Защита от заклинания.
/// </summary>
public class SpellDefense
{
/// <summary>
/// Идентификатор защиты от заклинания.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <summary>
/// Идентификатор заклинания, к которому относится защита.
/// </summary>
[Column(Order = 2)]
[Comment("Идентификатор заклинания")]
public int SpellId { get; set; }
/// <summary>
/// Флаг, указывающий, является ли защита от заклинания пассивной (например, для заклинаний, которые не требуют активного действия для защиты).
/// </summary>
[Column(Order = 3)]
public bool IsPassive { get; set; }
/// <summary>
/// Флаг, указывающий, является ли защита базовой.
/// </summary>
[Column(Order = 4)]
[Comment("Базовый спасборосок?")]
public bool? IsBasic { get; set; }
/// <summary>
/// Статистика, используемая для защиты от заклинания (например, "Fortitude", "Reflex", "Will").
/// </summary>
[Column(Order = 5)]
[MaxLength(255)]
public string Statistic { get; set; } = null!;
/// <summary>
/// Заклинание, к которому относится защита.
/// </summary>
public virtual Spell Spell { get; set; } = null!;
}
+6
View File
@@ -49,7 +49,13 @@ public class Subclass : IEntity
[Column(Order = 4)]
public string Extra { get; set; } = "{}";
/// <summary>
/// Коллекция сущностей, связанных с подклассом.
/// </summary>
public ICollection<Entity> Entities { get; set; } = [];
/// <summary>
/// Коллекция тренировок, связанных с подклассом.
/// </summary>
public ICollection<SubclassTrainings> Trainings { get; set; } = [];
}
+21 -1
View File
@@ -21,16 +21,30 @@ namespace Pf2eModel;
/// <summary>
/// Контекст базы данных.
///
/// Разделён на 2 файла для удобства навигации и чтения кода.
///
/// - в `Pf2eDbContext.cs` находится набор таблиц и конфигурация БД,
/// - в `Pf2eDbContextModel.cs` находится Fluent API описание связей в модели.
/// </summary>
// ReSharper disable once InconsistentNaming
public partial class Pf2eDbContext : DbContext
{
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Pf2eDbContext"/> без параметров.
/// </summary>
public Pf2eDbContext() { }
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Pf2eDbContext"/> с указанными параметрами конфигурации базы данных.
/// </summary>
/// <param name="options">Конфигурация базы данных.</param>
public Pf2eDbContext(DbContextOptions<Pf2eDbContext> options)
: base(options) { }
#region DbSets
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public virtual DbSet<Model.Structure.Action> Actions { get; set; }
public virtual DbSet<Ancestry> Ancestries { get; set; }
@@ -53,7 +67,7 @@ public partial class Pf2eDbContext : DbContext
public virtual DbSet<Class> Classes { get; set; }
public virtual DbSet<ClassKeyAbility> ClassKeyAbilities { get; set; }
public virtual DbSet<ClassKeyAttribute> ClassKeyAbilities { get; set; }
public virtual DbSet<ClassProgression> ClassProgressions { get; set; }
@@ -123,6 +137,7 @@ public partial class Pf2eDbContext : DbContext
public virtual DbSet<Trait> Traits { get; set; }
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
#endregion
/// <inheritdoc/>
@@ -166,3 +181,8 @@ public partial class Pf2eDbContext : DbContext
);
}
}
/// <summary>
/// Набор классов модели ORM EntityFramework.
/// </summary>
internal static class NamespaceDoc { }
+13 -1
View File
@@ -304,7 +304,7 @@ public partial class Pf2eDbContext
{
BindEntity(entity);
});
modelBuilder.Entity<ClassKeyAbility>(entity =>
modelBuilder.Entity<ClassKeyAttribute>(entity =>
{
entity
.HasOne(d => d.Class)
@@ -585,10 +585,22 @@ public partial class Pf2eDbContext
);
}
/// <summary>
/// CLR-представление функции поиска в локализованной строке.
/// </summary>
/// <param name="data">Локализованная строка, в которой будет осуществляться поиск.</param>
/// <param name="search_value">Искомое значение для поиска.</param>
/// <returns>Флаг, указывающий, найдено ли искомое значение в локализованной строке.</returns>
// ReSharper disable once InconsistentNaming
public static bool LocaleSearch(LocaleString data, string search_value) =>
throw new InvalidOperationException("Only for LINQ translation");
/// <summary>
/// CLR-представление функции поиска в локализованной строке с массивом значений для поиска.
/// </summary>
/// <param name="data">Локализованная строка, в которой будет осуществляться поиск.</param>
/// <param name="search_values">Массив искомых значений для поиска.</param>
/// <returns>Флаг, указывающий, найдено ли хотя бы одно искомое значение в локализованной строке.</returns>
// ReSharper disable once InconsistentNaming
public static bool LocaleSearchArray(LocaleString data, IEnumerable<string> search_values) =>
throw new InvalidOperationException("Only for LINQ translation");
+4
View File
@@ -4,6 +4,9 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<DefaultDocumentationFolder>..\Documentation\$(MSBuildProjectName)</DefaultDocumentationFolder>
<DefaultDocumentationFileNameFactory>Name</DefaultDocumentationFileNameFactory>
</PropertyGroup>
<ItemGroup>
<None Include="..\Pf2eDataScrapper\.env" Link=".env">
@@ -11,6 +14,7 @@
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="DefaultDocumentation" Version="1.0.2" PrivateAssets="all" />
<PackageReference Include="dotenv.net" Version="3.2.1" />
<PackageReference Include="EFCore.NamingConventions" Version="9.0.0" />
<PackageReference Include="linq2db" Version="5.4.1" />