Files
Pf2eDataScrapper/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractSubclassProcessor.cs
T
2025-05-15 01:37:27 +04:00

101 lines
3.2 KiB
C#

using Pf2eDataScrapper.App;
using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Helpers;
using Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers;
using Pf2eDataScrapper.Processors;
using Pf2eModel;
using Pf2eModel.Model.Base;
using Pf2eModel.Model.Common.I18n;
using Pf2eModel.Model.Enum;
using Pf2eModel.Model.Structure;
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Processors;
/// <summary>
/// Абстрактный класс-обработчик сущностей подклассов, полученных из Архивов Нефиса.
/// Класс предназначен для обработки данных с помощью различных обработчиков,
/// для которых указан атрибут <see cref="ProcessorAttribute"/>.
/// </summary>
internal abstract class AbstractSubclassProcessor(
ProcessorInput input,
StringHelper stringHelper,
DatabaseHelper helper,
AonprdBuilderGlobals globals
) : AbstractEntityProcessor(input, stringHelper, helper, globals)
{
/// <inheritdoc/>
public override EntityType Type => EntityType.Subclass;
/// <inheritdoc/>
public abstract override Subclass Object { get; }
/// <summary>
/// Название подкласса.
/// </summary>
public abstract string? ClassName { get; }
/// <summary>
/// Название группы подклассов.
/// </summary>
public abstract string GroupName { get; }
/// <inheritdoc/>
protected override void Add() => Context.Subclasses.Add(Object);
/// <inheritdoc/>
public override void Process()
{
base.Process();
Object.Group = GetGroup();
ProcessObject();
}
/// <summary>
/// Обработка полей подкласса.
/// </summary>
public abstract void ProcessObject();
/// <summary>
/// Получение CLR-представления группы подклассов, к которому относится обрабатываемый подкласс.
/// </summary>
/// <returns>CLR-представления группы подклассов.</returns>
public SubclassGroup GetGroup()
{
SubclassGroup? group = Context.SubclassGroups.FirstOrDefault(g =>
Pf2eDbContext.LocaleSearch(g.Entity.Name, GroupName)
);
if (group is not null)
{
return group;
}
Class? cl = ClassName is not null
? Context.Classes.FirstOrDefault(c =>
Pf2eDbContext.LocaleSearch(c.Entity.Name, GroupName)
)
: null;
Entity groupEntity = new()
{
Id = Helper.NextEntityId,
Type = EntityType.SubclassGroup,
Img = "",
Description = "",
Rarity = EntityRarity.Common,
IsTranslated = false,
IsChecked = false,
Name = { [LocaleType.English] = GroupName },
Slug = Helper.GenerateSlug(GroupName),
};
Context.Entities.Add(groupEntity);
group = new() { Entity = groupEntity, Class = cl };
Context.SubclassGroups.Add(group);
return group;
}
}