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