diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityCategoryProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityCategoryProcessor.cs new file mode 100644 index 0000000..fb9f003 --- /dev/null +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityCategoryProcessor.cs @@ -0,0 +1,58 @@ +using Newtonsoft.Json.Linq; +using Pf2eDataScrapper.Helpers; +using Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers; +using Pf2eDataScrapper.Processors; +using Pf2eDataScrapper.Processors.Attributes; +using Pf2eModel; +using Pf2eModel.Model.Common.I18n; +using Pf2eModel.Model.Enum; +using Pf2eModel.Model.Structure; + +namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Processors.Types; + +[ProcessorCollection( + "aonprd:deity-category", + InnerType = "deity-category", + CompendiumType = ProcessorCompendiumEnum.Aonprd, + Description = "Категории божеств", + Group = ProcessorGroupEnum.AonprdEntities +)] +internal class DeityCategoryProcessor( + ProcessorInput input, + StringHelper stringHelper, + DatabaseHelper helper, + AonprdBuilderGlobals globals +) : AbstractEntityProcessor(input, stringHelper, helper, globals) +{ + /// + public override EntityType Type => EntityType.DeityCategory; + + /// + public override DeityCategory Object { get; } = new(); + + /// + protected override void Add() => Context.DeityCategories.Add(Object); + + /// + public override void Process() + { + base.Process(); + + // Обработка описания категории + ProcessDescription(); + } + + /// + /// Обработка описания категории. + /// + private void ProcessDescription() + { + // Получаем markdown с описанием из summary_markdown или другого поля + // В данных deity-category.yaml нет summary_markdown, используем пустую строку + string descriptionMarkdown = string.Empty; + + // Преобразуем markdown в текст (можно добавить более сложную обработку) + // Пока просто сохраняем как есть + Object.Description[LocaleType.English] = descriptionMarkdown; + } +} diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityProcessor.cs index 70ea28d..1354086 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/DeityProcessor.cs @@ -45,7 +45,11 @@ internal partial class DeityProcessor( base.Process(); // Установка категории божества - Object.Category = Input.GetRequired("deity_category"); + string categoryName = Input.GetRequired("deity_category"); + Object.Category = categoryName; + + // Связываем с сущностью категории + ProcessCategory(categoryName); ProcessFonts(); @@ -234,6 +238,24 @@ internal partial class DeityProcessor( } } + /// + /// Обработка категории божества. + /// + /// Название категории. + private void ProcessCategory(string categoryName) + { + // Ищем категорию в базе данных + DeityCategory? category = Context.DeityCategories.FirstOrDefault(dc => + Pf2eDbContext.LocaleSearch(dc.Entity.Name, categoryName) + ); + + if (category != null) + { + Object.CategoryId = category.Id; + Object.CategoryEntity = category; + } + } + /// /// Обработка текстов описания божества. /// diff --git a/Pf2eModel/Model/Enum/EntityType.cs b/Pf2eModel/Model/Enum/EntityType.cs index bb72622..1a6dba7 100644 --- a/Pf2eModel/Model/Enum/EntityType.cs +++ b/Pf2eModel/Model/Enum/EntityType.cs @@ -126,4 +126,10 @@ public enum EntityType /// [PgName("rule")] Rule, + + /// + /// Категория божества. + /// + [PgName("deity_category")] + DeityCategory, } diff --git a/Pf2eModel/Model/Structure/Deity.cs b/Pf2eModel/Model/Structure/Deity.cs index 7774a7d..bce3ac4 100644 --- a/Pf2eModel/Model/Structure/Deity.cs +++ b/Pf2eModel/Model/Structure/Deity.cs @@ -115,6 +115,18 @@ public class Deity : IEntity /// public ICollection DeityWeapons { get; set; } = new List(); + /// + /// Категория божества (связь). + /// + public DeityCategory? CategoryEntity { get; set; } + + /// + /// Идентификатор категории божества. + /// + [Column(Order = 12)] + [Comment("Идентификатор категории божества")] + public int? CategoryId { get; set; } + /// /// Навыки божества. /// diff --git a/Pf2eModel/Model/Structure/DeityCategory.cs b/Pf2eModel/Model/Structure/DeityCategory.cs new file mode 100644 index 0000000..5fc1fb2 --- /dev/null +++ b/Pf2eModel/Model/Structure/DeityCategory.cs @@ -0,0 +1,32 @@ +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; + +namespace Pf2eModel.Model.Structure; + +/// +/// Категория божества. +/// +[EntityOfType(EntityType.DeityCategory)] +public class DeityCategory : IEntity +{ + /// + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.None)] + [Column(Order = 1)] + [Comment("Идентификатор")] + public int Id { get; set; } + + /// + public Entity Entity { get; set; } = null!; + + /// + /// Описание категории. + /// + [Column(Order = 2)] + [Comment("Описание категории")] + public LocaleString Description { get; set; } = []; +} diff --git a/Pf2eModel/Pf2eDbContext.cs b/Pf2eModel/Pf2eDbContext.cs index e816d5e..69e9b68 100644 --- a/Pf2eModel/Pf2eDbContext.cs +++ b/Pf2eModel/Pf2eDbContext.cs @@ -137,6 +137,8 @@ public partial class Pf2eDbContext : DbContext public virtual DbSet Trainings { get; set; } + public virtual DbSet DeityCategories { get; set; } + public virtual DbSet Traits { get; set; } #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member diff --git a/Pf2eModel/Pf2eDbContextModel.cs b/Pf2eModel/Pf2eDbContextModel.cs index 904d549..d26307d 100644 --- a/Pf2eModel/Pf2eDbContextModel.cs +++ b/Pf2eModel/Pf2eDbContextModel.cs @@ -571,6 +571,13 @@ public partial class Pf2eDbContext .OnDelete(DeleteBehavior.SetNull); }); + // DeityCategory + modelBuilder.Entity(entity => + { + BindEntity(entity); + BindLocaleString(entity, d => d.Description); + }); + // Trait modelBuilder.Entity(entity => { diff --git a/README.md b/README.md index 79289d1..d5c9e9c 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,9 @@ INNER JOIN entities AS E ON A.id = E.id; - [ ] sidebar.yaml **Боги** -- [ ] deity.yaml -- [ ] deity-category.yaml -- [ ] domain.yaml +- [x] deity.yaml +- [x] deity-category.yaml +- [x] domain.yaml **Фиты** - [x] feat.yaml