101 lines
3.2 KiB
C#
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;
|
|
}
|
|
}
|