diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractEntityProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractEntityProcessor.cs deleted file mode 100644 index 69912aa..0000000 --- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractEntityProcessor.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Newtonsoft.Json.Linq; -using Slugify; - -namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder -{ - internal abstract class AbstractEntityProcessor(JObject input) : AbstractProcessor(input) - { - public abstract string DbType { get; } - - public override void Process() - { - Add("name", "name"); - Add("img", "img"); - Add("description", "system.description.value"); - Add("description_gm", "system.description.gm"); - Add("type", DbType); - Add("rarity", "system.traits.rarity"); - - SlugHelper sh = new(); - Data.Add("slug", sh.GenerateSlug(Data["name"]?.ToString() ?? throw new NullReferenceException("'name' is null"))); - } - - } -} diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs index 15b4440..bc30c43 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/AbstractProcessor.cs @@ -1,30 +1,43 @@ -using Newtonsoft.Json.Linq; +using LinqToDB.DataProvider.SapHana; +using Newtonsoft.Json.Linq; using Npgsql; namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder { internal abstract class AbstractProcessor(JObject input) { + public readonly Pf2eTestContext Context = new(); + public readonly JObject Input = input; - public Pf2eDatabase Database = Pf2eDatabase.Instance; - - public DataBuilderHelper Helper = DataBuilderHelper.Instance; - - public abstract string Table { get; } - - public Dictionary Data = []; - - protected void Add(string key, string path) - { - Data.Add(key, DataBuilderHelper.JsonGet(Input, path)); - } - public abstract void Process(); - public int Save() + public void Save() { - return Helper.Insert(Table, Data); + Context.SaveChanges(); } + + + + protected T GetRequired(string path) + { + var token = Input.SelectToken(path) ?? throw new NullReferenceException($"'{path}' is null"); + + return token.ToObject() ?? throw new NullReferenceException($"'{path}' is null"); + } + + protected T? GetOptional(string path) + { + var token = Input.SelectToken(path) ?? null; + + if (token is null) + { + return default!; + } + + return token.ToObject() ?? default; + } + + } } diff --git a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/Processors/ConditionProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/Processors/ConditionProcessor.cs index edb6f81..f027bb8 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/Processors/ConditionProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Pf2eFoundry/DataBuilder/Processors/ConditionProcessor.cs @@ -1,20 +1,15 @@ using Newtonsoft.Json.Linq; +using Pf2eDataScrapper.Model; +using Slugify; +using static LinqToDB.Common.Configuration; namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder.Processors { [Pf2eTypeProcessor("Item.condition")] - internal class ConditionProcessor(JObject input) : AbstractEntityProcessor(input) + internal class ConditionProcessor(JObject input) : AbstractProcessor(input) { - public override string Table => "condition"; - - public override string DbType => "condition"; - public override void Process() { - base.Process(); - - Add("group", "system.group"); - JObject extra = new() { { "duration", Input.SelectToken("duration") }, @@ -23,7 +18,22 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder.Pro { "value", Input.SelectToken("value") } }; - Data.Add("extra", extra.ToString(Newtonsoft.Json.Formatting.Indented)); + Condition condition = new() + { + Name = GetRequired("name"), + Img = GetRequired("img"), + Description = GetRequired("system.description.value"), + DescriptionGm = GetOptional("system.description.gm"), + // Type = + IsTranslated = false, + IsChecked = false, + + // Group = GetOptional("system.group"); + Extra = extra.ToString(Newtonsoft.Json.Formatting.Indented) + }; + condition.Slug = new SlugHelper().GenerateSlug(condition.Name); + + Context.Conditions.Add(condition); } } }