Документирование и небольшой рефакторинг модели.
This commit is contained in:
@@ -10,51 +10,93 @@ using Pf2eModel.Model.Structure;
|
||||
|
||||
namespace Pf2eModel.Model.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Корневая сущность.
|
||||
/// </summary>
|
||||
public class Entity
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Column(Order = 1)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public LocaleString Name { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Тип сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип объекта")]
|
||||
[Comment("Тип сущности")]
|
||||
public EntityType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Часть имени в URL.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Часть имени в URL")]
|
||||
public string Slug { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Изображение сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[StringLength(255)]
|
||||
[Comment("Изображение объекта")]
|
||||
public string Img { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Текстовое описание сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Текстовое описание объекта")]
|
||||
// ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength
|
||||
[Comment("Текстовое описание сущности")]
|
||||
public string Description { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Редкость сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Редкость сущности")]
|
||||
public EntityRarity Rarity { get; set; } = EntityRarity.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что у объекта существует перевод.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Флаг, указывающий, что у объекта существует перевод")]
|
||||
[Comment("Флаг, указывающий, что у сущности существует перевод")]
|
||||
public bool? IsTranslated { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что объект был проверен и не требует автоматической перезаписи.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Флаг, указывающий, что объект был проверен и не требует автоматической перезаписи")]
|
||||
[Comment("Флаг, указывающий, что сущность был проверен и не требует автоматической перезаписи")]
|
||||
public bool? IsChecked { get; set; } = false;
|
||||
|
||||
public virtual ICollection<Trait> Traits { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Коллекция признаков, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<Trait> Traits { get; set; } = [];
|
||||
|
||||
public virtual ICollection<Keyword> Keywords { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Коллекция ключевых слов, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<Keyword> Keywords { get; set; } = [];
|
||||
|
||||
public virtual ICollection<EntitySource> Sources { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Коллекция источников, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<EntitySource> Sources { get; set; } = [];
|
||||
|
||||
public virtual ICollection<EntityExternal> Externals { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Коллекция внешних ссылок, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<EntityExternal> Externals { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,25 +1,45 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Common.I18n;
|
||||
|
||||
namespace Pf2eModel.Model.Base.Keywords;
|
||||
|
||||
/// <summary>
|
||||
/// Ключевое слово.
|
||||
/// </summary>
|
||||
public class Keyword
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя ключевого слова.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public LocaleString Name = [];
|
||||
|
||||
/// <summary>
|
||||
/// Часть имени в URL.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Часть имени в URL")]
|
||||
public string Slug { get; set; } = null!;
|
||||
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
/// <summary>
|
||||
/// Коллекция сущностей, которые используют это ключевое слово.
|
||||
/// </summary>
|
||||
public ICollection<Entity> Entities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция синонимов ключевого слова.
|
||||
/// </summary>
|
||||
public ICollection<KeywordAlias> Aliases { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,22 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2eModel.Model.Base.Keywords;
|
||||
|
||||
/// <summary>
|
||||
/// Синоним ключевого слова.
|
||||
/// </summary>
|
||||
public class KeywordAlias
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор связаннного ключевого слова.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор ключевого слова")]
|
||||
public int KeywordId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Значение синонима ключевого слова.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Синоним")]
|
||||
public string Value { get; set; } = null!;
|
||||
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
/// <summary>
|
||||
/// Ключевое слово, к которому относится синоним.
|
||||
/// </summary>
|
||||
public Keyword Keyword { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -4,30 +4,56 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2eModel.Model.Base.Source;
|
||||
|
||||
/// <summary>
|
||||
/// Связь между сущностью и источником.
|
||||
/// </summary>
|
||||
public class EntitySource
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор связи.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 0)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор источника.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор источника")]
|
||||
public int SourceId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация о источнике, например, номер страницы, номер тома и т.д.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Номер страницы, эррата и т.д.")]
|
||||
public string Suffix { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что объект является частью ремастера.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Флаг, указывающий, что объект является частью ремастера")]
|
||||
public bool IsRemaster { get; set; }
|
||||
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
/// <summary>
|
||||
/// Сущность, к которой относится источник.
|
||||
/// </summary>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Источник, к которому относится сущность.
|
||||
/// </summary>
|
||||
public Source Source { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,26 +1,48 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Base.Source;
|
||||
|
||||
/// <summary>
|
||||
/// Источник сущности.
|
||||
/// </summary>
|
||||
public class Source
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор источника.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя источника.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Категория источника.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Категория источника")]
|
||||
public SourceCategory Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата выхода источника.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Дата выхода источника")]
|
||||
public DateOnly? ReleaseDate { get; set; }
|
||||
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
/// <summary>
|
||||
/// Связанные сущности.
|
||||
/// </summary>
|
||||
public ICollection<EntitySource> EntitySources { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -4,13 +4,24 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2eModel.Model.Base.Targets;
|
||||
|
||||
/// <summary>
|
||||
/// Внешняя ссылка сущности.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(EntityId), nameof(TargetId))]
|
||||
public class EntityExternal
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор цели.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор цели")]
|
||||
public int TargetId { get; set; }
|
||||
|
||||
/*
|
||||
@@ -19,18 +30,30 @@ public class EntityExternal
|
||||
public string ExternalId { get; set; } = "";
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// Конечная часть URL внешней ссылки.
|
||||
/// Для источников Foundry - полный UUID объекта.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Часть URL до объекта. Для источников Foundry - полный UUID объекта")]
|
||||
public string Suffix { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Контрольная сумма объекта.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[MaxLength(32)]
|
||||
[Comment("Контроль версии объекта")]
|
||||
[Comment("Контрольная сумма объекта")]
|
||||
public string Md5 { get; set; } = null!;
|
||||
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
public virtual Entity Entity { get; set; } = null!;
|
||||
/// <summary>
|
||||
/// Сущность, которая ссылается на внешнюю ссылку.
|
||||
/// </summary>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
public virtual ExternalTarget Target { get; set; } = null!;
|
||||
/// <summary>
|
||||
/// Цель внешней ссылки.
|
||||
/// </summary>
|
||||
public ExternalTarget Target { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,28 +1,49 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2eModel.Model.Base.Targets;
|
||||
|
||||
/// <summary>
|
||||
/// Цель внешней ссылки.
|
||||
/// </summary>
|
||||
public class ExternalTarget
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор цели.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название цели.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[StringLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Иконка цели.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[StringLength(255)]
|
||||
[Comment("Иконка цели")]
|
||||
public string Icon { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Префикс для URL-адреса внешней ссылки.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[StringLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Префикс для URL-адреса внешней ссылки")]
|
||||
public string Prefix { get; set; } = null!;
|
||||
|
||||
[Column(Order = 4)]
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
/// <summary>
|
||||
/// Коллекция сущностей, которые ссылаются на эту цель.
|
||||
/// </summary>
|
||||
public ICollection<EntityExternal> EntityExternals { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,21 +1,41 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2eModel.Model.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Частота использования.
|
||||
/// </summary>
|
||||
public class Frequency
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Максимальная продолжительсность.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Максимальная продолжительсность")]
|
||||
public int Max { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Частота использования.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Частота использования")]
|
||||
public int Per { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Значение использования.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Значение использования")]
|
||||
public int? Value { get; set; }
|
||||
}
|
||||
|
||||
@@ -3,8 +3,16 @@ using System.Reflection;
|
||||
|
||||
namespace Pf2eModel.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Расширения для работы с локализацией.
|
||||
/// </summary>
|
||||
public static class LocaleExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Получение строкового представления типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeType">Тип локализации.</param>
|
||||
/// <returns>Строковое представление типа локализации.</returns>
|
||||
public static string GetTypeString(this LocaleType localeType)
|
||||
{
|
||||
FieldInfo fi = localeType.GetType().GetField(localeType.ToString())!;
|
||||
@@ -16,7 +24,13 @@ public static class LocaleExtension
|
||||
?? localeType.ToString();
|
||||
}
|
||||
|
||||
public static LocaleType GetTypeByString(this string localeType)
|
||||
/// <summary>
|
||||
/// Получение типа локализации по строковому представлению типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeTypeString">Строковое представление типа локализации.</param>
|
||||
/// <returns>Тип локализации.</returns>
|
||||
/// <exception cref="InvalidEnumArgumentException">Исключение, если строковое представление не соответсвует ни одному типу локализации.</exception>
|
||||
public static LocaleType GetTypeByString(this string localeTypeString)
|
||||
{
|
||||
foreach (FieldInfo field in typeof(LocaleType).GetFields())
|
||||
{
|
||||
@@ -28,7 +42,7 @@ public static class LocaleExtension
|
||||
continue;
|
||||
}
|
||||
|
||||
if (descriptionAttribute.Description == localeType)
|
||||
if (descriptionAttribute.Description == localeTypeString)
|
||||
{
|
||||
return (LocaleType)field.GetValue(null)!;
|
||||
}
|
||||
@@ -36,6 +50,7 @@ public static class LocaleExtension
|
||||
|
||||
throw new InvalidEnumArgumentException();
|
||||
}
|
||||
|
||||
/*
|
||||
public static IQueryable<T> WhereLocale(
|
||||
this IQueryable<T> query, Expression<Func<T, LocaleString>> expression, string searchTerm) where T : class
|
||||
|
||||
@@ -1,11 +1,26 @@
|
||||
namespace Pf2eModel.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент локализации.
|
||||
/// </summary>
|
||||
/// <param name="type">Тип локализации.</param>
|
||||
/// <param name="value">Значение локализации.</param>
|
||||
public class LocaleItem(LocaleType type, string value)
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип локализации.
|
||||
/// </summary>
|
||||
public LocaleType Locale { get; set; } = type;
|
||||
|
||||
/// <summary>
|
||||
/// Значение локализации.
|
||||
/// </summary>
|
||||
public string Value { get; set; } = value;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор класса <see cref="LocaleItem"/> по паре ключ-значение.
|
||||
/// </summary>
|
||||
/// <param name="item">Пара ключ-значение по строковому представлению типа.</param>
|
||||
public LocaleItem(KeyValuePair<string, string> item)
|
||||
: this(LocaleExtension.GetTypeByString(item.Key), item.Value) { }
|
||||
: this(item.Key.GetTypeByString(), item.Value) { }
|
||||
}
|
||||
|
||||
@@ -3,40 +3,90 @@ using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Pf2eModel.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Локализованная строка.
|
||||
/// </summary>
|
||||
public class LocaleString : ICollection<LocaleItem>
|
||||
{
|
||||
/// <summary>
|
||||
/// Список локализаций строк.
|
||||
/// </summary>
|
||||
private readonly List<LocaleItem> _items = [];
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет наличие хотя бы одной локализации.
|
||||
/// </summary>
|
||||
private void AssureDefault()
|
||||
{
|
||||
if (_items.Count == 0)
|
||||
{
|
||||
_items.Add(new LocaleItem(LocaleType.English, string.Empty));
|
||||
_items.Add(new(LocaleType.English, string.Empty));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Количество локализаций.
|
||||
/// </summary>
|
||||
public int Count => _items.Count;
|
||||
|
||||
public bool IsReadOnly => false;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция реализованных типов локализаций.
|
||||
/// </summary>
|
||||
public ICollection<LocaleType> Types => _items.Select(c => c.Locale).ToList();
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool IsReadOnly => false;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор класса <see cref="LocaleString"/>.
|
||||
/// </summary>
|
||||
public LocaleString()
|
||||
{
|
||||
AssureDefault();
|
||||
}
|
||||
|
||||
private LocaleType _E(string localeString) => LocaleExtension.GetTypeByString(localeString);
|
||||
/// <summary>
|
||||
/// Получение типа локализации по строковому представлению.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление.</param>
|
||||
/// <returns>Тип локализации.</returns>
|
||||
private LocaleType _E(string localeString) => localeString.GetTypeByString();
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа локализации с учётом её наличия в коллекции.
|
||||
/// </summary>
|
||||
/// <param name="locale">Искомый тип локализации.</param>
|
||||
/// <returns>Реальный тип локализации.</returns>
|
||||
private LocaleType RealLocale(LocaleType locale) =>
|
||||
Contains(locale) ? locale : LocaleType.English;
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа локализации по строковому представлению с учётом её наличия в коллекции.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>Реальный тип локализации.</returns>
|
||||
private LocaleType RealLocale(string localeString) => RealLocale(_E(localeString));
|
||||
|
||||
/// <summary>
|
||||
/// Получение объекта локализованной строки по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="locale">Искомый тип локализации.</param>
|
||||
/// <returns>Объект локализованной строки.</returns>
|
||||
public LocaleItem GetItem(LocaleType locale) => this.First(c => c.Locale == RealLocale(locale));
|
||||
|
||||
public LocaleItem GetItem(string locale) => this.First(c => c.Locale == RealLocale(locale));
|
||||
/// <summary>
|
||||
/// Получение объекта локализованной строки по строковому представлению типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>Объект локализованной строки.</returns>
|
||||
public LocaleItem GetItem(string localeString) =>
|
||||
this.First(c => c.Locale == RealLocale(localeString));
|
||||
|
||||
/// <summary>
|
||||
/// Получение локализованной строки по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="locale">Искомый тип локализации.</param>
|
||||
/// <returns>Локализованная строка.</returns>
|
||||
public string this[LocaleType locale]
|
||||
{
|
||||
get => GetItem(locale).Value;
|
||||
@@ -48,52 +98,87 @@ public class LocaleString : ICollection<LocaleItem>
|
||||
}
|
||||
else
|
||||
{
|
||||
_items.Add(new LocaleItem(locale, value));
|
||||
_items.Add(new(locale, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение локализованной строки по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>Локализованная строка.</returns>
|
||||
public string this[string localeString]
|
||||
{
|
||||
get => this[_E(localeString)];
|
||||
set => this[_E(localeString)] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление объекта локализованной строки в коллекцию.
|
||||
/// </summary>
|
||||
/// <param name="item">Объект локализированной строки.</param>
|
||||
public void Add(LocaleItem item)
|
||||
{
|
||||
this[item.Locale] = item.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление локализованной строки в коллекцию.
|
||||
/// </summary>
|
||||
/// <param name="locale">Тип локализации.</param>
|
||||
/// <param name="value">Строка локазации.</param>
|
||||
public void Add(LocaleType locale, string value)
|
||||
{
|
||||
this[locale] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отчистка коллекции локализованных строк.
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
_items.Clear();
|
||||
AssureDefault();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка наличия объекта локализованной строки в коллекции.
|
||||
/// </summary>
|
||||
/// <param name="item">Объект локализированной строки.</param>
|
||||
/// <returns>`true`, если объект есть; `false`, если нет.</returns>
|
||||
public bool Contains(LocaleItem item)
|
||||
{
|
||||
return _items.Contains(item);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка наличия локализованной строки в коллекции по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="locale">Тип локализации.</param>
|
||||
/// <returns>`true`, если искомый тип локализации есть; `false`, если нет.</returns>
|
||||
public bool Contains(LocaleType locale)
|
||||
{
|
||||
return Types.Contains(locale);
|
||||
}
|
||||
|
||||
public bool Contains(string value)
|
||||
/// <summary>
|
||||
/// Проверка наличия локализованной строки в коллекции по строковому представлению типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>`true`, если искомый тип локализации есть; `false`, если нет.</returns>
|
||||
public bool Contains(string localeString)
|
||||
{
|
||||
return this.Any(item => item.Value == value);
|
||||
return this.Any(item => item.Value == localeString);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void CopyTo(LocaleItem[] array, int arrayIndex)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Remove(LocaleItem item)
|
||||
{
|
||||
bool result = _items.Remove(item);
|
||||
@@ -107,21 +192,28 @@ public class LocaleString : ICollection<LocaleItem>
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IEnumerator<LocaleItem> GetEnumerator()
|
||||
{
|
||||
return _items.GetEnumerator();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override string ToString()
|
||||
{
|
||||
return this[LocaleType.English];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сериализация локализованной строки в JSON-формат.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление JSON-представления.</returns>
|
||||
public string Serialize()
|
||||
{
|
||||
JObject json = [];
|
||||
@@ -134,10 +226,15 @@ public class LocaleString : ICollection<LocaleItem>
|
||||
return json.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Десериализация локализованной строки из JSON-формата.
|
||||
/// </summary>
|
||||
/// <param name="input">Строковое представление JSON-представления.</param>
|
||||
/// <returns>Объект локализованной строки.</returns>
|
||||
public static LocaleString Deserialize(string input)
|
||||
{
|
||||
JObject json = JObject.Parse(input);
|
||||
LocaleString result = new();
|
||||
LocaleString result = [];
|
||||
|
||||
foreach (KeyValuePair<string, JToken?> item in json)
|
||||
{
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
namespace Pf2eModel.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Тип локализации.
|
||||
/// </summary>
|
||||
public enum LocaleType
|
||||
{
|
||||
[Description("en")]
|
||||
|
||||
@@ -1,20 +1,36 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Common.I18n;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Изучаемая способность.
|
||||
/// </summary>
|
||||
public class Training
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название способности.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Название способности")]
|
||||
public LocaleString Name { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Тип способности.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип способности")]
|
||||
public TrainingType Type { get; set; }
|
||||
}
|
||||
|
||||
@@ -2,10 +2,20 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип действия.
|
||||
/// </summary>
|
||||
public enum ActionCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестный тип действия.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Действие архетипа.
|
||||
/// </summary>
|
||||
[PgName("archetype")]
|
||||
Archetype,
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечиленение количества действий.
|
||||
/// </summary>
|
||||
public enum ActionEnum
|
||||
{
|
||||
[PgName("unknown")]
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
public enum AncestryVision
|
||||
{
|
||||
[PgName("normal")]
|
||||
Normal,
|
||||
|
||||
[PgName("low-light-vision")]
|
||||
LowLightVision,
|
||||
|
||||
[PgName("dark-vision")]
|
||||
DarkVision,
|
||||
}
|
||||
@@ -2,26 +2,50 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление значений атрибутов.
|
||||
/// </summary>
|
||||
public enum AttributeValues
|
||||
{
|
||||
/// <summary>
|
||||
/// Свободный атрибут.
|
||||
/// </summary>
|
||||
[PgName("free")]
|
||||
Free,
|
||||
|
||||
/// <summary>
|
||||
/// Сила.
|
||||
/// </summary>
|
||||
[PgName("str")]
|
||||
Strength,
|
||||
|
||||
/// <summary>
|
||||
/// Ловкость.
|
||||
/// </summary>
|
||||
[PgName("dex")]
|
||||
Dexterity,
|
||||
|
||||
/// <summary>
|
||||
/// Телосложение.
|
||||
/// </summary>
|
||||
[PgName("con")]
|
||||
Constitution,
|
||||
|
||||
/// <summary>
|
||||
/// Интеллект.
|
||||
/// </summary>
|
||||
[PgName("int")]
|
||||
Intelligence,
|
||||
|
||||
/// <summary>
|
||||
/// Мудрость.
|
||||
/// </summary>
|
||||
[PgName("wis")]
|
||||
Wisdom,
|
||||
|
||||
/// <summary>
|
||||
/// Харизма.
|
||||
/// </summary>
|
||||
[PgName("cha")]
|
||||
Charisma,
|
||||
}
|
||||
|
||||
@@ -2,23 +2,50 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип элемента прогрессии класса.
|
||||
/// </summary>
|
||||
public enum ClassProgressionType
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестный тип прогрессии класса.
|
||||
/// </summary>
|
||||
[PgName("entity")]
|
||||
Entity,
|
||||
|
||||
/// <summary>
|
||||
/// Навык архетипа.
|
||||
/// </summary>
|
||||
[PgName("ancestry_feat")]
|
||||
AncestryFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Классовая особенность.
|
||||
/// </summary>
|
||||
[PgName("class_feat")]
|
||||
ClassFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Общий навык.
|
||||
/// </summary>
|
||||
[PgName("general_feat")]
|
||||
GeneralFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Навык
|
||||
/// </summary>
|
||||
[PgName("skill_feat")]
|
||||
SkillFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Увеличение навыка.
|
||||
/// </summary>
|
||||
[PgName("skill_increase")]
|
||||
SkillIncrease,
|
||||
|
||||
/// <summary>
|
||||
/// Увеличение атрибута.
|
||||
/// </summary>
|
||||
[PgName("attribute_increase")]
|
||||
AttributeIncrease,
|
||||
}
|
||||
|
||||
@@ -2,23 +2,44 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип состояния
|
||||
/// </summary>
|
||||
public enum ConditionGroup
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестое состояние.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Чувство.
|
||||
/// </summary>
|
||||
[PgName("senses")]
|
||||
Senses,
|
||||
|
||||
/// <summary>
|
||||
/// Способность.
|
||||
/// </summary>
|
||||
[PgName("abilities")]
|
||||
Abilities,
|
||||
|
||||
/// <summary>
|
||||
/// Смерть.
|
||||
/// </summary>
|
||||
[PgName("death")]
|
||||
Death,
|
||||
|
||||
/// <summary>
|
||||
/// Отношение. (???)
|
||||
/// </summary>
|
||||
[PgName("attitudes")]
|
||||
Attitudes,
|
||||
|
||||
/// <summary>
|
||||
/// Обнаружение.
|
||||
/// </summary>
|
||||
[PgName("detection")]
|
||||
Detection,
|
||||
}
|
||||
|
||||
@@ -2,17 +2,32 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божества.
|
||||
/// </summary>
|
||||
public enum DeityCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Божество.
|
||||
/// </summary>
|
||||
[PgName("deity")]
|
||||
Deity,
|
||||
|
||||
/// <summary>
|
||||
/// Пантеон.
|
||||
/// </summary>
|
||||
[PgName("pantheon")]
|
||||
Pantheon,
|
||||
|
||||
/// <summary>
|
||||
/// Ковенант.
|
||||
/// </summary>
|
||||
[PgName("covenant")]
|
||||
Covenant,
|
||||
|
||||
/// <summary>
|
||||
/// Философия.
|
||||
/// </summary>
|
||||
[PgName("philosophy")]
|
||||
Philosophy,
|
||||
}
|
||||
|
||||
@@ -2,17 +2,32 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божественной силы.
|
||||
/// </summary>
|
||||
public enum DeityFonts
|
||||
{
|
||||
/// <summary>
|
||||
/// Без божественной силы.
|
||||
/// </summary>
|
||||
[PgName("none")]
|
||||
None,
|
||||
|
||||
/// <summary>
|
||||
/// Исцеление.
|
||||
/// </summary>
|
||||
[PgName("heal")]
|
||||
Heal,
|
||||
|
||||
/// <summary>
|
||||
/// Урон.
|
||||
/// </summary>
|
||||
[PgName("harm")]
|
||||
Harm,
|
||||
|
||||
/// <summary>
|
||||
/// Любой тип божественной силы.
|
||||
/// </summary>
|
||||
[PgName("any")]
|
||||
Any,
|
||||
}
|
||||
|
||||
@@ -2,14 +2,26 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип освящения божества.
|
||||
/// </summary>
|
||||
public enum DeitySanctification
|
||||
{
|
||||
/// <summary>
|
||||
/// Святость.
|
||||
/// </summary>
|
||||
[PgName("holy")]
|
||||
Holy,
|
||||
|
||||
/// <summary>
|
||||
/// Нечестивость.
|
||||
/// </summary>
|
||||
[PgName("unholy")]
|
||||
Unholy,
|
||||
|
||||
/// <summary>
|
||||
/// Любое.
|
||||
/// </summary>
|
||||
[PgName("any")]
|
||||
Any,
|
||||
}
|
||||
|
||||
@@ -2,26 +2,50 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление элементов.
|
||||
/// </summary>
|
||||
public enum ElementEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Универсальный элемент.
|
||||
/// </summary>
|
||||
[PgName("universal")]
|
||||
Universal,
|
||||
|
||||
/// <summary>
|
||||
/// Воздух.
|
||||
/// </summary>
|
||||
[PgName("air")]
|
||||
Air,
|
||||
|
||||
/// <summary>
|
||||
/// Вода.
|
||||
/// </summary>
|
||||
[PgName("water")]
|
||||
Water,
|
||||
|
||||
/// <summary>
|
||||
/// Земля.
|
||||
/// </summary>
|
||||
[PgName("earth")]
|
||||
Earth,
|
||||
|
||||
/// <summary>
|
||||
/// Огонь.
|
||||
/// </summary>
|
||||
[PgName("fire")]
|
||||
Fire,
|
||||
|
||||
/// <summary>
|
||||
/// Дерево.
|
||||
/// </summary>
|
||||
[PgName("wood")]
|
||||
Wood,
|
||||
|
||||
/// <summary>
|
||||
/// Металл.
|
||||
/// </summary>
|
||||
[PgName("metal")]
|
||||
Metal,
|
||||
}
|
||||
|
||||
@@ -2,17 +2,32 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление редкости сущности.
|
||||
/// </summary>
|
||||
public enum EntityRarity
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычная редкость.
|
||||
/// </summary>
|
||||
[PgName("common")]
|
||||
Common,
|
||||
|
||||
/// <summary>
|
||||
/// Необычная редкость.
|
||||
/// </summary>
|
||||
[PgName("uncommon")]
|
||||
Uncommon,
|
||||
|
||||
/// <summary>
|
||||
/// Редкая редкость.
|
||||
/// </summary>
|
||||
[PgName("rare")]
|
||||
Rare,
|
||||
|
||||
/// <summary>
|
||||
/// Уникальная редкость.
|
||||
/// </summary>
|
||||
[PgName("unique")]
|
||||
Unique,
|
||||
}
|
||||
|
||||
@@ -2,62 +2,122 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип сущности.
|
||||
/// </summary>
|
||||
public enum EntityType
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестный тип сущности.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Признак.
|
||||
/// </summary>
|
||||
[PgName("trait")]
|
||||
Trait,
|
||||
|
||||
/// <summary>
|
||||
/// Действие.
|
||||
/// </summary>
|
||||
[PgName("action")]
|
||||
Action,
|
||||
|
||||
/// <summary>
|
||||
/// Родословная.
|
||||
/// </summary>
|
||||
[PgName("ancestry")]
|
||||
Ancestry,
|
||||
|
||||
/// <summary>
|
||||
/// Архетип.
|
||||
/// </summary>
|
||||
[PgName("archetype")]
|
||||
Archetype,
|
||||
|
||||
/// <summary>
|
||||
/// Происхождение.
|
||||
/// </summary>
|
||||
[PgName("background")]
|
||||
Background,
|
||||
|
||||
/// <summary>
|
||||
/// Рюкзак.
|
||||
/// </summary>
|
||||
[PgName("backpack")]
|
||||
Backpack,
|
||||
|
||||
/// <summary>
|
||||
/// Способность кампании.
|
||||
/// </summary>
|
||||
[PgName("campaign_feature")]
|
||||
CampaignFeature,
|
||||
|
||||
/// <summary>
|
||||
/// Класс.
|
||||
/// </summary>
|
||||
[PgName("class")]
|
||||
Class,
|
||||
|
||||
/// <summary>
|
||||
/// Группа подклассов.
|
||||
/// </summary>
|
||||
[PgName("subclass_group")]
|
||||
SubclassGroup,
|
||||
|
||||
/// <summary>
|
||||
/// Подкласс.
|
||||
/// </summary>
|
||||
[PgName("subclass")]
|
||||
Subclass,
|
||||
|
||||
/// <summary>
|
||||
/// Состояние.
|
||||
/// </summary>
|
||||
[PgName("condition")]
|
||||
Condition,
|
||||
|
||||
/// <summary>
|
||||
/// Божество.
|
||||
/// </summary>
|
||||
[PgName("deity")]
|
||||
Deity,
|
||||
|
||||
/// <summary>
|
||||
/// Навык.
|
||||
/// </summary>
|
||||
[PgName("feat")]
|
||||
Feat,
|
||||
|
||||
/// <summary>
|
||||
/// Наследие.
|
||||
/// </summary>
|
||||
[PgName("heritage")]
|
||||
Heritage,
|
||||
|
||||
/// <summary>
|
||||
/// Заклианиние.
|
||||
/// </summary>
|
||||
[PgName("spell")]
|
||||
Spell,
|
||||
|
||||
/// <summary>
|
||||
/// Ритуал.
|
||||
/// </summary>
|
||||
[PgName("ritual")]
|
||||
Ritual,
|
||||
|
||||
/// <summary>
|
||||
/// Язык.
|
||||
/// </summary>
|
||||
[PgName("language")]
|
||||
Language,
|
||||
|
||||
/// <summary>
|
||||
/// Правило.
|
||||
/// </summary>
|
||||
[PgName("rule")]
|
||||
Rule,
|
||||
}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
public enum FeatActionType
|
||||
{
|
||||
[PgName("passive")]
|
||||
Passive,
|
||||
|
||||
[PgName("action")]
|
||||
Action,
|
||||
|
||||
[PgName("reaction")]
|
||||
Reaction,
|
||||
|
||||
[PgName("free")]
|
||||
Free,
|
||||
}
|
||||
@@ -7,11 +7,14 @@ public enum FeatCategory
|
||||
[PgName("uncategorized")]
|
||||
Uncategorized,
|
||||
|
||||
[PgName("ancestry")]
|
||||
Ancestry,
|
||||
|
||||
[PgName("ancestry-feature")]
|
||||
AncestryFeature,
|
||||
|
||||
[PgName("class-feature")]
|
||||
ClassFeature,
|
||||
[PgName("archetype")]
|
||||
Archetype,
|
||||
|
||||
[PgName("calling")]
|
||||
Calling,
|
||||
@@ -19,15 +22,15 @@ public enum FeatCategory
|
||||
[PgName("class")]
|
||||
Class,
|
||||
|
||||
[PgName("class-feature")]
|
||||
ClassFeature,
|
||||
|
||||
[PgName("skill")]
|
||||
Skill,
|
||||
|
||||
[PgName("general")]
|
||||
General,
|
||||
|
||||
[PgName("ancestry")]
|
||||
Ancestry,
|
||||
|
||||
[PgName("bonus")]
|
||||
Bonus,
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
public enum Size
|
||||
{
|
||||
[PgName("tiny")]
|
||||
Tiny,
|
||||
|
||||
[PgName("small")]
|
||||
Small,
|
||||
|
||||
[PgName("medium")]
|
||||
Medium,
|
||||
|
||||
[PgName("large")]
|
||||
Large,
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Размер.
|
||||
/// </summary>
|
||||
public enum SizeEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Крошечный размер.
|
||||
/// </summary>
|
||||
[PgName("tiny")]
|
||||
Tiny,
|
||||
|
||||
/// <summary>
|
||||
/// Маленький размер.
|
||||
/// </summary>
|
||||
[PgName("small")]
|
||||
Small,
|
||||
|
||||
/// <summary>
|
||||
/// Средний размер.
|
||||
/// </summary>
|
||||
[PgName("medium")]
|
||||
Medium,
|
||||
|
||||
/// <summary>
|
||||
/// Большой размер.
|
||||
/// </summary>
|
||||
[PgName("large")]
|
||||
Large,
|
||||
|
||||
/// <summary>
|
||||
/// Громадный размер.
|
||||
/// </summary>
|
||||
[PgName("huge")]
|
||||
Huge,
|
||||
}
|
||||
@@ -2,26 +2,50 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление категорий источников.
|
||||
/// </summary>
|
||||
public enum SourceCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестная категория источника.
|
||||
/// </summary>
|
||||
[PgName("rulebook")]
|
||||
Rulebooks,
|
||||
|
||||
/// <summary>
|
||||
/// Серия приключений.
|
||||
/// </summary>
|
||||
[PgName("adventure-path")]
|
||||
AdventurePaths,
|
||||
|
||||
/// <summary>
|
||||
/// Lost Omens
|
||||
/// </summary>
|
||||
[PgName("lost-omens")]
|
||||
LostOmens,
|
||||
|
||||
/// <summary>
|
||||
/// Приключение.
|
||||
/// </summary>
|
||||
[PgName("adventures")]
|
||||
Adventures,
|
||||
|
||||
/// <summary>
|
||||
/// Комиксы.
|
||||
/// </summary>
|
||||
[PgName("comics")]
|
||||
Comics,
|
||||
|
||||
/// <summary>
|
||||
/// Блог-посты.
|
||||
/// </summary>
|
||||
[PgName("blog-posts")]
|
||||
BlogPosts,
|
||||
|
||||
/// <summary>
|
||||
/// Сообщество.
|
||||
/// </summary>
|
||||
[PgName("society")]
|
||||
Society,
|
||||
}
|
||||
|
||||
@@ -2,38 +2,74 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип области заклинания.
|
||||
/// </summary>
|
||||
public enum SpellAreaType
|
||||
{
|
||||
/// <summary>
|
||||
/// Взрыв.
|
||||
/// </summary>
|
||||
[PgName("burst")]
|
||||
Burst,
|
||||
|
||||
/// <summary>
|
||||
/// Эманация.
|
||||
/// </summary>
|
||||
[PgName("emanation")]
|
||||
Emanation,
|
||||
|
||||
/// <summary>
|
||||
/// Конус.
|
||||
/// </summary>
|
||||
[PgName("cone")]
|
||||
Cone,
|
||||
|
||||
/// <summary>
|
||||
/// Линия.
|
||||
/// </summary>
|
||||
[PgName("line")]
|
||||
Line,
|
||||
|
||||
/// <summary>
|
||||
/// Квадрат.
|
||||
/// </summary>
|
||||
[PgName("square")]
|
||||
Square,
|
||||
|
||||
/// <summary>
|
||||
/// Куб.
|
||||
/// </summary>
|
||||
[PgName("cube")]
|
||||
Cube,
|
||||
|
||||
/// <summary>
|
||||
/// Цилиндр.
|
||||
/// </summary>
|
||||
[PgName("cylinder")]
|
||||
Cylinder,
|
||||
|
||||
/// <summary>
|
||||
/// Варьируемое.
|
||||
/// </summary>
|
||||
[PgName("varies")]
|
||||
Varies,
|
||||
|
||||
/// <summary>
|
||||
/// Параллелипипед.
|
||||
/// </summary>
|
||||
[PgName("cuboid")]
|
||||
Cuboid,
|
||||
|
||||
/// <summary>
|
||||
/// Круг.
|
||||
/// </summary>
|
||||
[PgName("circle")]
|
||||
Circle,
|
||||
|
||||
/// <summary>
|
||||
/// Иное.
|
||||
/// </summary>
|
||||
[PgName("other")]
|
||||
Other,
|
||||
}
|
||||
|
||||
@@ -2,11 +2,26 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип урона заклинания.
|
||||
/// </summary>
|
||||
public enum SpellDamageCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычный урон.
|
||||
/// </summary>
|
||||
[PgName("normal")]
|
||||
Normal,
|
||||
|
||||
/// <summary>
|
||||
/// Продолжительный урон.
|
||||
/// </summary>
|
||||
[PgName("persistent")]
|
||||
Persistent,
|
||||
|
||||
/// <summary>
|
||||
/// Брызги.
|
||||
/// </summary>
|
||||
[PgName("splash")]
|
||||
Splash,
|
||||
}
|
||||
|
||||
@@ -2,14 +2,26 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип урона заклинания.
|
||||
/// </summary>
|
||||
public enum SpellDamageKinds
|
||||
{
|
||||
/// <summary>
|
||||
/// Урон.
|
||||
/// </summary>
|
||||
[PgName("damage")]
|
||||
Damage,
|
||||
|
||||
/// <summary>
|
||||
/// Исцеление.
|
||||
/// </summary>
|
||||
[PgName("healing")]
|
||||
Healing,
|
||||
|
||||
/// <summary>
|
||||
/// Любое.
|
||||
/// </summary>
|
||||
[PgName("any")]
|
||||
Any,
|
||||
}
|
||||
|
||||
@@ -2,26 +2,50 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Традиция заклинания.
|
||||
/// </summary>
|
||||
public enum SpellTradition
|
||||
{
|
||||
/// <summary>
|
||||
/// Без традиции.
|
||||
/// </summary>
|
||||
[PgName("none")]
|
||||
None,
|
||||
|
||||
/// <summary>
|
||||
/// Сакральная традиция.
|
||||
/// </summary>
|
||||
[PgName("divine")]
|
||||
Divine,
|
||||
|
||||
/// <summary>
|
||||
/// Оккультная традиция.
|
||||
/// </summary>
|
||||
[PgName("occult")]
|
||||
Occult,
|
||||
|
||||
/// <summary>
|
||||
/// Арканная традиция.
|
||||
/// </summary>
|
||||
[PgName("arcane")]
|
||||
Arcane,
|
||||
|
||||
/// <summary>
|
||||
/// Примальная традиция.
|
||||
/// </summary>
|
||||
[PgName("primal")]
|
||||
Primal,
|
||||
|
||||
/// <summary>
|
||||
/// Элементная традиция.
|
||||
/// </summary>
|
||||
[PgName("elemental")]
|
||||
Elemental,
|
||||
|
||||
/// <summary>
|
||||
/// Все традиции.
|
||||
/// </summary>
|
||||
[PgName("all")]
|
||||
All,
|
||||
}
|
||||
|
||||
@@ -2,23 +2,44 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Ранг тренировки.
|
||||
/// </summary>
|
||||
public enum TrainingRank
|
||||
{
|
||||
/// <summary>
|
||||
/// Необученный.
|
||||
/// </summary>
|
||||
[PgName("untrained")]
|
||||
Untrained,
|
||||
|
||||
/// <summary>
|
||||
/// Обученный.
|
||||
/// </summary>
|
||||
[PgName("trained")]
|
||||
Trained,
|
||||
|
||||
/// <summary>
|
||||
/// Эксперт.
|
||||
/// </summary>
|
||||
[PgName("expert")]
|
||||
Expert,
|
||||
|
||||
/// <summary>
|
||||
/// Мастер.
|
||||
/// </summary>
|
||||
[PgName("master")]
|
||||
Master,
|
||||
|
||||
/// <summary>
|
||||
/// Легендарный.
|
||||
/// </summary>
|
||||
[PgName("legendary")]
|
||||
Legendary,
|
||||
|
||||
/// <summary>
|
||||
/// Мифический.
|
||||
/// </summary>
|
||||
[PgName("mythic")]
|
||||
Mythic,
|
||||
}
|
||||
|
||||
@@ -2,23 +2,44 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип тренировки.
|
||||
/// </summary>
|
||||
public enum TrainingType
|
||||
{
|
||||
/// <summary>
|
||||
/// Восприятие.
|
||||
/// </summary>
|
||||
[PgName("perception")]
|
||||
Perception,
|
||||
|
||||
/// <summary>
|
||||
/// Навык.
|
||||
/// </summary>
|
||||
[PgName("skill")]
|
||||
Skill,
|
||||
|
||||
/// <summary>
|
||||
/// Знание.
|
||||
/// </summary>
|
||||
[PgName("lore")]
|
||||
Lore,
|
||||
|
||||
/// <summary>
|
||||
/// Оружие.
|
||||
/// </summary>
|
||||
[PgName("weapon")]
|
||||
Weapon,
|
||||
|
||||
/// <summary>
|
||||
/// Защита.
|
||||
/// </summary>
|
||||
[PgName("armor")]
|
||||
Armor,
|
||||
|
||||
/// <summary>
|
||||
/// Спасбросок.
|
||||
/// </summary>
|
||||
[PgName("save")]
|
||||
Save,
|
||||
}
|
||||
|
||||
@@ -2,14 +2,26 @@
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип признака.
|
||||
/// </summary>
|
||||
public enum TraitType
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычный признак.
|
||||
/// </summary>
|
||||
[PgName("regular")]
|
||||
Regular,
|
||||
|
||||
/// <summary>
|
||||
/// Признак класса.
|
||||
/// </summary>
|
||||
[PgName("class")]
|
||||
Class,
|
||||
|
||||
/// <summary>
|
||||
/// Признак традиции.
|
||||
/// </summary>
|
||||
[PgName("tradition")]
|
||||
Tradition,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2eModel.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление типов зрения.
|
||||
/// </summary>
|
||||
public enum VisionEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычное зрение.
|
||||
/// </summary>
|
||||
[PgName("normal")]
|
||||
Normal,
|
||||
|
||||
/// <summary>
|
||||
/// Зрение в темноте.
|
||||
/// </summary>
|
||||
[PgName("low-light-vision")]
|
||||
LowLightVision,
|
||||
|
||||
/// <summary>
|
||||
/// Тёмное зрение.
|
||||
/// </summary>
|
||||
[PgName("dark-vision")]
|
||||
DarkVision,
|
||||
}
|
||||
@@ -3,10 +3,19 @@ using Pf2eModel.Model.Base;
|
||||
|
||||
namespace Pf2eModel.Model;
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс сущностей структуры.
|
||||
/// </summary>
|
||||
public interface IEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Корневая сущность.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Entity Entity { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,23 +1,38 @@
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Действие.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Action)]
|
||||
public class Action : IEntity
|
||||
{
|
||||
[System.ComponentModel.DataAnnotations.Key]
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Количество действий.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Количество действий")]
|
||||
public ActionEnum Actions { get; set; } = ActionEnum.Unknown;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
// ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
|
||||
public Entity Entity { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -1,37 +1,73 @@
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
using Pf2eModel.Model.Structure.AncestryRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Родословная.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Ancestry)]
|
||||
public class Ancestry : IEntity
|
||||
{
|
||||
[System.ComponentModel.DataAnnotations.Key]
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Размеры родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
public Size[] Size { get; set; } = [];
|
||||
[Comment("Размеры родословной")]
|
||||
public SizeEnum[] Size { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Количество очков здоровья.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Количество очков здоровья")]
|
||||
public int Hp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Скорость передвижения.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Скорость передвижения")]
|
||||
public int Speed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип зрения.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
public AncestryVision Vision { get; set; } = AncestryVision.Normal;
|
||||
[Comment("Тип зрения")]
|
||||
public VisionEnum VisionEnum { get; set; } = VisionEnum.Normal;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция повышениий аттрибутов.
|
||||
/// </summary>
|
||||
public ICollection<AncestryBoost> AncestryBoosts { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция сущностей родословной.
|
||||
/// </summary>
|
||||
public ICollection<AncestryItem> AncestryItems { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция языков родословной.
|
||||
/// </summary>
|
||||
public ICollection<AncestryLanguage> AncestryLanguages { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция наследий.
|
||||
/// </summary>
|
||||
public ICollection<Heritage> Heritages { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,30 +1,55 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Архетип.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Archetype)]
|
||||
public class Archetype : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Уровень.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Уровень")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор способности, которая является посвящением в архетип.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("ID посвящения")]
|
||||
public int? DedicationFeatId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация об архетипе.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
// ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Посвящение в архетип.
|
||||
/// </summary>
|
||||
public Feat DedicationFeat { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Способности архетипа.
|
||||
/// </summary>
|
||||
public ICollection<Feat> Feats { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,24 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
using Pf2eModel.Model.Structure.BackgroundRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Предыстория.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Background)]
|
||||
public class Background : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Аттрибуты предыстории.
|
||||
/// </summary>
|
||||
public ICollection<BackgroundBoost> BackgroundBoosts { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Способности предыстории.
|
||||
/// </summary>
|
||||
public ICollection<BackgroundItem> BackgroundItems { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Навыки предыстории.
|
||||
/// </summary>
|
||||
public ICollection<BackgroundTraining> BackgroundSkills { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,40 +1,73 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
using Pf2eModel.Model.Structure.ClassRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Класс.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Class)]
|
||||
public class Class : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
[Column(Order = 3)]
|
||||
/// <summary>
|
||||
/// Количество очков здоровья.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Количество очков здоровья")]
|
||||
public int Hp { get; set; }
|
||||
|
||||
[Column(Order = 4)]
|
||||
public int Perception { get; set; }
|
||||
|
||||
[Column(Order = 5)]
|
||||
/// <summary>
|
||||
/// Флаг, указывающий на то, что класс является заклинательным.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Заклинатель?")]
|
||||
public bool Spellcasting { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Традиция заклинаний класса.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
public SpellTradition Tradition { get; set; }
|
||||
[Comment("Традиция заклинаний")]
|
||||
public SpellTradition? Tradition { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Количество дополнительных навыков.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Дополнительные навыки")]
|
||||
public int AdditionalTrainedSkills { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Аттрибуты класса.
|
||||
/// </summary>
|
||||
public virtual ICollection<ClassKeyAbility> ClassKeyAbilities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Прогрессия класса.
|
||||
/// </summary>
|
||||
public virtual ICollection<ClassProgression> ClassProgressions { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Навыки класса.
|
||||
/// </summary>
|
||||
public virtual ICollection<ClassTraining> ClassTrainings { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Группы подклассов.
|
||||
/// </summary>
|
||||
public virtual ICollection<SubclassGroup> SubclassGroups { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,24 +1,38 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Состояние.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Condition)]
|
||||
public class Condition : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Группа состояния.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Группа состояния")]
|
||||
public ConditionGroup? Group { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
// ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Common;
|
||||
using Pf2eModel.Model.Enum;
|
||||
@@ -7,35 +8,72 @@ using Pf2eModel.Model.Structure.DeityRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Божество.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Deity)]
|
||||
public class Deity : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божества.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Тип божества")]
|
||||
public DeityCategory Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип божественный силы.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип божественной силы")]
|
||||
public DeityFonts Fonts { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип освящения.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Тип освящения")]
|
||||
public DeitySanctification Sanctification { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Обязательное освящение.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Обязательное освящение")]
|
||||
public bool SanctificationMust { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Аттрибуты божества.
|
||||
/// </summary>
|
||||
public ICollection<DeityAttribute> DeityAttributes { get; set; } = new List<DeityAttribute>();
|
||||
|
||||
/// <summary>
|
||||
/// Домены божества.
|
||||
/// </summary>
|
||||
public ICollection<DeityDomain> DeityDomains { get; set; } = new List<DeityDomain>();
|
||||
|
||||
/// <summary>
|
||||
/// Заклинания божества.
|
||||
/// </summary>
|
||||
public ICollection<DeitySpell> DeitySpells { get; set; } = new List<DeitySpell>();
|
||||
|
||||
/// <summary>
|
||||
/// Оружия божества.
|
||||
/// </summary>
|
||||
public ICollection<DeityWeapon> DeityWeapons { get; set; } = new List<DeityWeapon>();
|
||||
|
||||
/// <summary>
|
||||
/// Навыки божества.
|
||||
/// </summary>
|
||||
public ICollection<Training> Skills { get; set; } = new List<Training>();
|
||||
}
|
||||
|
||||
@@ -1,28 +1,44 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
using Pf2eModel.Model.Structure.FeatRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Способность.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Feat)]
|
||||
public class Feat : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Категория способности.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
public ActionCategory Category { get; set; }
|
||||
[Comment("Категория способности")]
|
||||
public FeatCategory Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень способности.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Уровень способности")]
|
||||
public int Level { get; set; }
|
||||
|
||||
[Column(Order = 5)]
|
||||
[Comment("Количество действий")]
|
||||
public int? Actions { get; set; } = null;
|
||||
|
||||
[Column(Order = 6)]
|
||||
@@ -37,11 +53,20 @@ public class Feat : IEntity
|
||||
[Column(Order = 9)]
|
||||
public bool IsPassive { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
// ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Архетипы, которые могут использовать эту способность.
|
||||
/// </summary>
|
||||
public ICollection<Archetype> Archetypes { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Требования к получению способности.
|
||||
/// </summary>
|
||||
public ICollection<FeatPrerequisite> FeatPrerequisites { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,22 +1,36 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Наследие.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Heritage)]
|
||||
public class Heritage : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор родословной")]
|
||||
public int? AncestryId { get; set; }
|
||||
|
||||
public virtual Ancestry? Ancestry { get; set; }
|
||||
/// <summary>
|
||||
/// Родословная.
|
||||
/// </summary>
|
||||
public Ancestry? Ancestry { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,17 +1,24 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Язык.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Language)]
|
||||
public class Language : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
}
|
||||
|
||||
@@ -8,60 +8,127 @@ using Pf2eModel.Model.Structure.RitualRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Ритуал.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Ritual)]
|
||||
public class Ritual : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Уровень ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Уровень ритуала")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Продолжительность ритуала в секундах.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Продолжительность ритуала в секундах")]
|
||||
public int CastTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Время действия эффекта ритуала в секундах.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Время действия эффекта ритуала в секундах")]
|
||||
public int Duration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Элементы ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Элементы ритуала")]
|
||||
public ElementEnum[] Elements { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Дальнность ритуала в футах.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Дальнность ритуала")]
|
||||
public int Range { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ранг основной проверки.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Ранг основной проверки")]
|
||||
public TrainingRank PrimaryCheckRank { get; set; } = TrainingRank.Trained;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация об основной проверки.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Дополнительная информация об основной проверки")]
|
||||
public LocaleString? PrimaryCheckSuffix { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Количество дополнительных заклинателей, необходимых для ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Количество дополнительных заклинателей")]
|
||||
public int SecondaryCasters { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Максимальное количество дополнительных заклинателей, необходимых для ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
[Comment("Максимальное количество дополнительных заклинателей")]
|
||||
public int SecondaryCastersMax { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация о дополнительных заклинателях.
|
||||
/// </summary>
|
||||
[Column(Order = 11)]
|
||||
[Comment("Дополнительная информация о дополнительных заклинателях")]
|
||||
public LocaleString? SecondaryCastersSuffix { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая дальность ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 12)]
|
||||
[Comment("Дальность ритуала")]
|
||||
public LocaleString? RangeString { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая цель ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 13)]
|
||||
[Comment("Цель ритуала")]
|
||||
public LocaleString? Target { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая стоимость ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 14)]
|
||||
[Comment("Стоимость ритуала")]
|
||||
public LocaleString? Cost { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая требования к ритуалу.
|
||||
/// </summary>
|
||||
[Column(Order = 15)]
|
||||
[Comment("Требования к ритуалу")]
|
||||
public LocaleString? Requirement { get; set; } = null;
|
||||
|
||||
public virtual RitualArea? Area { get; set; } = null;
|
||||
/// <summary>
|
||||
/// Коллекция областей ритуала.
|
||||
/// </summary>
|
||||
public RitualArea? Area { get; set; } = null;
|
||||
|
||||
public virtual ICollection<RitualCheck> Checks { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Коллекция проверок ритуала.
|
||||
/// </summary>
|
||||
public ICollection<RitualCheck> Checks { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,29 +1,53 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Правило.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Rule)]
|
||||
public class Rule : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Порядок отображения.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Порядок отображения")]
|
||||
public int Order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор родительского правила.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Родительского правило")]
|
||||
public int? ParentId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Родительское правило.
|
||||
/// </summary>
|
||||
public Rule? Parent { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Дочерние правила.
|
||||
/// </summary>
|
||||
public ICollection<Rule> Children { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Хлебные крошки для отображения в интерфейсе.
|
||||
/// </summary>
|
||||
public string[] Breadcrumbs { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Common.I18n;
|
||||
using Pf2eModel.Model.Enum;
|
||||
@@ -7,48 +8,97 @@ using Pf2eModel.Model.Structure.SpellRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Spell)]
|
||||
public class Spell : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Уровень заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Является ли заклинание фокусом.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Фокус?")]
|
||||
public bool IsFocus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Количество действий, необходимых для применения заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Количество действий")]
|
||||
public ActionEnum Actions { get; set; } = ActionEnum.Other;
|
||||
|
||||
/// <summary>
|
||||
/// Время длительности заклинания в секундах.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Время длительности заклинания")]
|
||||
public int? Duration { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Дальность заклинания в футах.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Дальность заклинания")]
|
||||
public int Range { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Традиции заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Традиции заклинания")]
|
||||
public SpellTradition[] Traditions { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Элементы заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Элементы заклинания")]
|
||||
public ElementEnum[] Elements { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Триггер заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Триггер заклинания")]
|
||||
public LocaleString? Trigger { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Цель заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
[Comment("Цель заклинания")]
|
||||
public LocaleString? Target { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Стоимость заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 11)]
|
||||
[Comment("Стоимость заклинания")]
|
||||
public LocaleString? Cost { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Требования к заклинанию.
|
||||
/// </summary>
|
||||
[Column(Order = 12)]
|
||||
[Comment("Требования к заклинанию")]
|
||||
public LocaleString? Requirement { get; set; } = null;
|
||||
|
||||
/*
|
||||
@@ -78,7 +128,13 @@ public class Spell : IEntity
|
||||
public bool CanHeightening { get; set; }
|
||||
*/
|
||||
|
||||
public virtual ICollection<SpellArea> SpellAreas { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Коллекция области заклинания.
|
||||
/// </summary>
|
||||
public ICollection<SpellArea> SpellAreas { get; set; } = [];
|
||||
|
||||
public virtual ICollection<SpellDefense> SpellDefenses { get; set; } = new List<SpellDefense>();
|
||||
/// <summary>
|
||||
/// Коллекция защиты от заклинания.
|
||||
/// </summary>
|
||||
public ICollection<SpellDefense> SpellDefenses { get; set; } = new List<SpellDefense>();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Common.I18n;
|
||||
using Pf2eModel.Model.Enum;
|
||||
@@ -7,28 +8,48 @@ using Pf2eModel.Model.Structure.ClassRelation;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Подкласс.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Subclass)]
|
||||
public class Subclass : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идетификатор группы подклассов.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Группа подклассов")]
|
||||
public int GroupId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Группа подклассов.
|
||||
/// </summary>
|
||||
public SubclassGroup Group { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Дополнительная информация")]
|
||||
public LocaleString Additional { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация в формате JSON.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
// ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength
|
||||
public string Extra { get; set; } = "{}";
|
||||
|
||||
public virtual ICollection<Entity> Entities { get; set; } = [];
|
||||
public ICollection<Entity> Entities { get; set; } = [];
|
||||
|
||||
public virtual ICollection<SubclassTrainings> Trainings { get; set; } = [];
|
||||
public ICollection<SubclassTrainings> Trainings { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,23 +1,41 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Группа подклассов.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.SubclassGroup)]
|
||||
public class SubclassGroup : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор класса.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор класса")]
|
||||
public int? ClassId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Класс, к которому относится группа подклассов.
|
||||
/// </summary>
|
||||
public Class? Class { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция подклассов, относящихся к этой группе.
|
||||
/// </summary>
|
||||
public ICollection<Subclass> Subclasses { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,23 +1,36 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Enum;
|
||||
|
||||
namespace Pf2eModel.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Признак.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Trait)]
|
||||
public class Trait : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тип признака.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Тип признака")]
|
||||
public TraitType Type { get; set; }
|
||||
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
public virtual ICollection<Entity> Entities { get; set; } = [];
|
||||
/// <summary>
|
||||
/// Сущности, которые имеют данный признак.
|
||||
/// </summary>
|
||||
public ICollection<Entity> Entities { get; set; } = [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user