Большая пачка обновлений
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using LinqToDB.Reflection;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using Pf2eModel;
|
using Pf2eModel;
|
||||||
using Pf2eModel.Model;
|
using Pf2eModel.Model;
|
||||||
@@ -13,13 +15,13 @@ using System.Text.RegularExpressions;
|
|||||||
|
|
||||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
||||||
|
|
||||||
internal abstract partial class AbstractProcessor(ProcessorInput input)
|
internal abstract partial class AbstractProcessor(AonprdProcessorInput input)
|
||||||
{
|
{
|
||||||
protected DatabaseHelper Helper = DatabaseHelper.Instance;
|
protected DatabaseHelper Helper = DatabaseHelper.Instance;
|
||||||
|
|
||||||
public readonly Pf2eDbContext Context = DatabaseHelper.DbContext;
|
public readonly Pf2eDbContext Context = DatabaseHelper.DbContext;
|
||||||
|
|
||||||
public readonly ProcessorInput Input = input;
|
public readonly AonprdProcessorInput Input = input;
|
||||||
|
|
||||||
public Entity Entity { get; set; } = new();
|
public Entity Entity { get; set; } = new();
|
||||||
|
|
||||||
@@ -27,6 +29,8 @@ internal abstract partial class AbstractProcessor(ProcessorInput input)
|
|||||||
|
|
||||||
public abstract IEntity Object { get; }
|
public abstract IEntity Object { get; }
|
||||||
|
|
||||||
|
protected abstract void Add();
|
||||||
|
|
||||||
public virtual void Process()
|
public virtual void Process()
|
||||||
{
|
{
|
||||||
if (Input.GetOptional<JArray>("remaster_id") is not null)
|
if (Input.GetOptional<JArray>("remaster_id") is not null)
|
||||||
@@ -47,6 +51,7 @@ internal abstract partial class AbstractProcessor(ProcessorInput input)
|
|||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
|
Add();
|
||||||
Context.SaveChanges();
|
Context.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +73,7 @@ internal abstract partial class AbstractProcessor(ProcessorInput input)
|
|||||||
Entity.IsTranslated = false;
|
Entity.IsTranslated = false;
|
||||||
Entity.IsChecked = false;
|
Entity.IsChecked = false;
|
||||||
|
|
||||||
|
Object.Entity = Entity;
|
||||||
Object.Id = Entity.Id;
|
Object.Id = Entity.Id;
|
||||||
|
|
||||||
Context.Entities.Add(Entity);
|
Context.Entities.Add(Entity);
|
||||||
@@ -229,6 +235,18 @@ internal abstract partial class AbstractProcessor(ProcessorInput input)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GenerateExtra(params string[] args)
|
||||||
|
{
|
||||||
|
Dictionary<string, object?> data = [];
|
||||||
|
|
||||||
|
foreach (string key in args)
|
||||||
|
{
|
||||||
|
data.Add(key, Input.Input.SelectToken(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
return JsonConvert.SerializeObject(data, new JsonSerializerSettings() { });
|
||||||
|
}
|
||||||
|
|
||||||
public static string Md5(string input, bool isLowercase = false)
|
public static string Md5(string input, bool isLowercase = false)
|
||||||
{
|
{
|
||||||
using MD5 md5 = MD5.Create();
|
using MD5 md5 = MD5.Create();
|
||||||
@@ -247,4 +265,6 @@ internal abstract partial class AbstractProcessor(ProcessorInput input)
|
|||||||
private static partial Regex SourceSuffixRegex();
|
private static partial Regex SourceSuffixRegex();
|
||||||
|
|
||||||
public class LegacyItemException(string name) : Exception($"Item '{name}' is linked with newer version, skipping.") { }
|
public class LegacyItemException(string name) : Exception($"Item '{name}' is linked with newer version, skipping.") { }
|
||||||
|
|
||||||
|
public class SkipItemException(string name, string reason) : Exception($"Item '{name}' is skipped, reason: {reason}.") { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ internal class AonprdDataBuilder(AonprdLoader loader)
|
|||||||
|
|
||||||
Window output = new(0, 4, Console.WindowWidth, Console.WindowHeight - 4, window);
|
Window output = new(0, 4, Console.WindowWidth, Console.WindowHeight - 4, window);
|
||||||
|
|
||||||
ProgressBar bar1 = new(bars, Loader.ItemCount, 15);
|
ProgressBar bar1 = new(bars, Processors.Items.Count, 15);
|
||||||
ProgressBar bar2 = new(bars, 1, 15);
|
ProgressBar bar2 = new(bars, 1, 15);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@@ -66,6 +66,10 @@ internal class AonprdDataBuilder(AonprdLoader loader)
|
|||||||
{
|
{
|
||||||
output.WriteLine(ex.Message);
|
output.WriteLine(ex.Message);
|
||||||
}
|
}
|
||||||
|
catch (SkipItemException ex)
|
||||||
|
{
|
||||||
|
output.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bar2.Refresh(j, "Processor completed");
|
bar2.Refresh(j, "Processor completed");
|
||||||
|
|||||||
+3
-14
@@ -4,19 +4,6 @@ namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
|||||||
public static class AonprdEnumResolver
|
public static class AonprdEnumResolver
|
||||||
{
|
{
|
||||||
private static readonly ICollection<Solver> Solvers = [
|
private static readonly ICollection<Solver> Solvers = [
|
||||||
new Solver<ActionType>(new()
|
|
||||||
{
|
|
||||||
{ "Single Action", ActionType.SingleAction },
|
|
||||||
{ "Reaction or One Action", ActionType.SingleAction },
|
|
||||||
{ "Free Action or One Action", ActionType.SingleAction },
|
|
||||||
{ "Two Actions", ActionType.TwoActions },
|
|
||||||
{ "Three Actions", ActionType.ThreeActions },
|
|
||||||
{ "Single Action to Three Actions", ActionType.SingleToThreeActions },
|
|
||||||
{ "Single Action or more Actions", ActionType.SingleToThreeActions },
|
|
||||||
{ "Single Action or Two Actions", ActionType.SingleToTwoActions },
|
|
||||||
{ "Single Action to Two Actions", ActionType.SingleToTwoActions },
|
|
||||||
}),
|
|
||||||
|
|
||||||
new Solver<SourceCategory>(new()
|
new Solver<SourceCategory>(new()
|
||||||
{
|
{
|
||||||
{ "Rulebooks", SourceCategory.Rulebooks },
|
{ "Rulebooks", SourceCategory.Rulebooks },
|
||||||
@@ -36,7 +23,9 @@ public static class AonprdEnumResolver
|
|||||||
|
|
||||||
new Solver<AttributeValues>(new()
|
new Solver<AttributeValues>(new()
|
||||||
{
|
{
|
||||||
{ "Consitution", AttributeValues.Constitution }
|
{ "Consitution", AttributeValues.Constitution },
|
||||||
|
{ "Other", AttributeValues.Free },
|
||||||
|
{ "other", AttributeValues.Free },
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -9,13 +9,13 @@ public class AonprdProcessorAttribute(string name, string type, string[] depende
|
|||||||
|
|
||||||
public readonly IEnumerable<string> Dependencies = dependencies;
|
public readonly IEnumerable<string> Dependencies = dependencies;
|
||||||
|
|
||||||
public AonprdProcessorAttribute(string type) : this(type, type, ["trait"])
|
public AonprdProcessorAttribute(string type) : this(type, type, ["trait", "source"])
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public AonprdProcessorAttribute(string type, string[] dependencies) : this(type, type, dependencies)
|
public AonprdProcessorAttribute(string type, string[] dependencies) : this(type, type, dependencies)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public AonprdProcessorAttribute(string name, string type) : this(name, type, ["trait"])
|
public AonprdProcessorAttribute(string name, string type) : this(name, type, ["trait", "source"])
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ internal class AonprdProcessorCollection
|
|||||||
|
|
||||||
AonprdProcessorAttribute attribute = type.GetCustomAttribute<AonprdProcessorAttribute>()!;
|
AonprdProcessorAttribute attribute = type.GetCustomAttribute<AonprdProcessorAttribute>()!;
|
||||||
|
|
||||||
ConstructorInfo constructor = type.GetConstructor([typeof(ProcessorInput)])!;
|
ConstructorInfo constructor = type.GetConstructor([typeof(AonprdProcessorInput)])!;
|
||||||
|
|
||||||
ProcessorItem? collision = Items.FirstOrDefault(i => i.Attribute.Name == attribute.Name);
|
ProcessorItem? collision = Items.FirstOrDefault(i => i.Attribute.Name == attribute.Name);
|
||||||
if (collision is not null)
|
if (collision is not null)
|
||||||
|
|||||||
@@ -15,4 +15,80 @@ internal class AonprdProcessorInput(JObject input) : ProcessorInput(input)
|
|||||||
return base.Enum<T>(value);
|
return base.Enum<T>(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ActionStruct ResolveActionString(string input)
|
||||||
|
{
|
||||||
|
ActionStruct result = new();
|
||||||
|
|
||||||
|
switch (input)
|
||||||
|
{
|
||||||
|
case "Single Action":
|
||||||
|
result.Actions = result.MaxActions = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Two Actions":
|
||||||
|
result.Actions = result.MaxActions = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Three Actions":
|
||||||
|
result.Actions = result.MaxActions = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Reaction":
|
||||||
|
result.IsReaction = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Free Action":
|
||||||
|
result.IsFreeAction = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Single Action to Three Actions":
|
||||||
|
case "Single Action or more Actions":
|
||||||
|
result.Actions = 1;
|
||||||
|
result.MaxActions = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Single Action or Two Actions":
|
||||||
|
case "Single Action to Two Actions":
|
||||||
|
result.Actions = 1;
|
||||||
|
result.MaxActions = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Two Actions or Three Actions":
|
||||||
|
result.Actions = 2;
|
||||||
|
result.MaxActions = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Reaction or One Action":
|
||||||
|
result.IsReaction = true;
|
||||||
|
result.Actions = result.MaxActions = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Reaction or Two Actions":
|
||||||
|
result.IsReaction = true;
|
||||||
|
result.Actions = result.MaxActions = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Free Action or One Action":
|
||||||
|
result.IsFreeAction = false;
|
||||||
|
result.Actions = result.MaxActions = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
result.IsPassive = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ActionStruct
|
||||||
|
{
|
||||||
|
public int Actions = 0;
|
||||||
|
public int MaxActions = 0;
|
||||||
|
public bool IsPassive = false;
|
||||||
|
public bool IsReaction = false;
|
||||||
|
public bool IsFreeAction = false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-56
@@ -1,75 +1,31 @@
|
|||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Pf2eModel.Model;
|
||||||
using Pf2eModel.Model.Enum;
|
using Pf2eModel.Model.Enum;
|
||||||
|
|
||||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
[AonprdProcessor("action")]
|
[AonprdProcessor("action")]
|
||||||
internal class ActionProcessor(ProcessorInput input) : AbstractProcessor(input)
|
internal class ActionProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
{
|
{
|
||||||
public override EntityType Type => EntityType.Action;
|
public override EntityType Type => EntityType.Action;
|
||||||
|
|
||||||
public override Pf2eModel.Model.Structure.Action Object { get; } = new();
|
public override Pf2eModel.Model.Structure.Action Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Actions.Add(Object);
|
||||||
|
|
||||||
public override void Process()
|
public override void Process()
|
||||||
{
|
{
|
||||||
base.Process();
|
base.Process();
|
||||||
|
|
||||||
switch (Input.GetOptional<string>("actions"))
|
AonprdProcessorInput.ActionStruct action = Input.ResolveActionString(Input.GetOptional<string>("actions") ?? "");
|
||||||
{
|
|
||||||
case "Single Action":
|
|
||||||
Object.Actions = Object.MaxActions = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Two Actions":
|
Object.Actions = action.Actions;
|
||||||
Object.Actions = Object.MaxActions = 2;
|
Object.MaxActions = action.MaxActions;
|
||||||
break;
|
Object.IsFreeAction = action.IsFreeAction;
|
||||||
|
Object.IsPassive = action.IsPassive;
|
||||||
case "Three Actions":
|
Object.IsReaction = action.IsReaction;
|
||||||
Object.Actions = Object.MaxActions = 3;
|
;
|
||||||
break;
|
Object.Extra = GenerateExtra("school");
|
||||||
|
|
||||||
case "Reaction":
|
|
||||||
Object.IsReaction = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Free Action":
|
|
||||||
Object.IsFreeAction = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Single Action to Three Actions":
|
|
||||||
case "Single Action or more Actions":
|
|
||||||
Object.Actions = 1;
|
|
||||||
Object.MaxActions = 3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Single Action or Two Actions":
|
|
||||||
case "Single Action to Two Actions":
|
|
||||||
Object.Actions = 1;
|
|
||||||
Object.MaxActions = 2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Reaction or One Action":
|
|
||||||
Object.IsReaction = true;
|
|
||||||
Object.Actions = Object.MaxActions = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "Free Action or One Action":
|
|
||||||
Object.IsFreeAction = false;
|
|
||||||
Object.Actions = Object.MaxActions = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Object.IsPassive = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.Extra = new JObject()
|
|
||||||
{
|
|
||||||
{ "school", Input.GetOptional<JToken>("school") },
|
|
||||||
|
|
||||||
}.ToString();
|
|
||||||
|
|
||||||
Context.Actions.Add(Object);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override string GetDescription()
|
protected override string GetDescription()
|
||||||
|
|||||||
+6
-13
@@ -9,11 +9,13 @@ using System.Text.RegularExpressions;
|
|||||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
[AonprdProcessor("ancestry", ["trait", "language"])]
|
[AonprdProcessor("ancestry", ["trait", "language"])]
|
||||||
internal class AncestryProcessor(ProcessorInput input) : AbstractProcessor(input)
|
internal class AncestryProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
{
|
{
|
||||||
public override EntityType Type { get; } = EntityType.Ancestry;
|
public override EntityType Type => EntityType.Ancestry;
|
||||||
|
|
||||||
public override Ancestry Object { get; } = new Ancestry();
|
public override Ancestry Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Ancestries.Add(Object);
|
||||||
|
|
||||||
public override void Process()
|
public override void Process()
|
||||||
{
|
{
|
||||||
@@ -21,7 +23,7 @@ internal class AncestryProcessor(ProcessorInput input) : AbstractProcessor(input
|
|||||||
|
|
||||||
if (type != "Ancestry")
|
if (type != "Ancestry")
|
||||||
{
|
{
|
||||||
return;
|
throw new SkipItemException(Input.GetRequired<string>("name"), "not an ancestry");
|
||||||
}
|
}
|
||||||
|
|
||||||
base.Process();
|
base.Process();
|
||||||
@@ -66,13 +68,4 @@ internal class AncestryProcessor(ProcessorInput input) : AbstractProcessor(input
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected override string GetDescription()
|
|
||||||
=> base.GetDescription() + AddedDescription([
|
|
||||||
"source_markdown",
|
|
||||||
"summary_markdown",
|
|
||||||
"trait_markdown",
|
|
||||||
"search_markdown"
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Pf2eModel.Model;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
|
using Pf2eModel.Model.Structure;
|
||||||
|
using Pf2eModel.Model.Structure.BackgroundRelation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
|
[AonprdProcessor("background")]
|
||||||
|
internal class BackgroundProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
|
{
|
||||||
|
public override EntityType Type => EntityType.Background;
|
||||||
|
|
||||||
|
public override Background Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Backgrounds.Add(Object);
|
||||||
|
|
||||||
|
public override void Process()
|
||||||
|
{
|
||||||
|
base.Process();
|
||||||
|
|
||||||
|
foreach (JToken token in Input.GetOptional<JArray>("attribute") ?? [])
|
||||||
|
{
|
||||||
|
BackgroundBoost boost = new()
|
||||||
|
{
|
||||||
|
Background = Object,
|
||||||
|
Attribute = Input.Enum<AttributeValues>(token.ToString())
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.BackgroundBoosts.Add(boost);
|
||||||
|
Context.BackgroundBoosts.Add(boost);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override string GetDescription()
|
||||||
|
=> base.GetDescription() + AddedDescription([
|
||||||
|
"feat_markdown",
|
||||||
|
"summary_markdown",
|
||||||
|
"skill_markdown",
|
||||||
|
"prerequisite_markdown",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
+195
@@ -0,0 +1,195 @@
|
|||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Pf2eModel.Model;
|
||||||
|
using Pf2eModel.Model.Common;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
|
using Pf2eModel.Model.Structure;
|
||||||
|
using Pf2eModel.Model.Structure.ClassRelation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
|
[AonprdProcessor("class", ["trait", "source", "skill"])]
|
||||||
|
internal class ClassProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
|
{
|
||||||
|
public override EntityType Type => EntityType.Class;
|
||||||
|
|
||||||
|
public override Class Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Classes.Add(Object);
|
||||||
|
|
||||||
|
public override void Process()
|
||||||
|
{
|
||||||
|
base.Process();
|
||||||
|
|
||||||
|
Object.Hp = Convert.ToInt32(Input.GetRequired<string>("hp_raw"));
|
||||||
|
|
||||||
|
AttributeValues[] attributes = Input.GetRequired<JArray>("attribute")
|
||||||
|
.Select(token => Input.Enum<AttributeValues>(token.ToString()))
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
foreach (AttributeValues attribute in attributes)
|
||||||
|
{
|
||||||
|
ClassKeyAbility classKeyAbility = new ClassKeyAbility()
|
||||||
|
{
|
||||||
|
Class = Object,
|
||||||
|
Value = attribute
|
||||||
|
};
|
||||||
|
|
||||||
|
Context.ClassKeyAbilities.Add(classKeyAbility);
|
||||||
|
Object.ClassKeyAbilities.Add(classKeyAbility);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClassTraining[] classTrainings =
|
||||||
|
[
|
||||||
|
.. ProcessTraining(Input.GetRequired<JArray>("attack_proficiency"), TrainingType.Weapon),
|
||||||
|
.. ProcessTraining(Input.GetRequired<JArray>("defense_proficiency"), TrainingType.Armor),
|
||||||
|
.. GetSkillTrainings(),
|
||||||
|
.. GetSaveTrainings(),
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (ClassTraining classTraining in classTrainings)
|
||||||
|
{
|
||||||
|
Context.ClassTrainings.Add(classTraining);
|
||||||
|
Object.ClassTrainings.Add(classTraining);
|
||||||
|
}
|
||||||
|
|
||||||
|
JArray tradition = Input.GetOptional<JArray>("tradition") ?? [];
|
||||||
|
|
||||||
|
switch (tradition.Count)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Object.Spellcasting = false;
|
||||||
|
Object.Tradition = SpellTradition.None;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
Object.Spellcasting = true;
|
||||||
|
Object.Tradition = Input.Enum<SpellTradition>(tradition[0].ToString());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Object.Spellcasting = true;
|
||||||
|
Object.Tradition = SpellTradition.All;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ICollection<ClassTraining> GetSkillTrainings()
|
||||||
|
{
|
||||||
|
string[] skillNames = Input.GetRequired<JArray>("skill_proficiency")
|
||||||
|
.Select(token => token.ToString())
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
Training[] skills = Context.Trainings.Where(t => skillNames.Contains(t.Name)).ToArray();
|
||||||
|
|
||||||
|
return skills.Select(skill => new ClassTraining()
|
||||||
|
{
|
||||||
|
Class = Object,
|
||||||
|
Training = skill,
|
||||||
|
Stage = TrainingStage.Trained,
|
||||||
|
}).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ICollection<ClassTraining> ProcessTraining(JArray array, TrainingType type)
|
||||||
|
{
|
||||||
|
const string pattern = @"^(.*?) in\s+(?:the)?\s*(.*)$";
|
||||||
|
List<ClassTraining> trainings = [];
|
||||||
|
|
||||||
|
foreach (string value in array.Select(token => token.ToString()))
|
||||||
|
{
|
||||||
|
MatchCollection m = Regex.Matches(value, pattern);
|
||||||
|
|
||||||
|
if (m.Count == 0)
|
||||||
|
{
|
||||||
|
throw new Exception($"Can't parse training string '{value}'");
|
||||||
|
}
|
||||||
|
|
||||||
|
TrainingStage stage = Input.Enum<TrainingStage>(m[0].Groups[1].Value);
|
||||||
|
|
||||||
|
string[] parts = GetTrainingString(m[0].Groups[2].Value);
|
||||||
|
|
||||||
|
foreach (string part in parts)
|
||||||
|
{
|
||||||
|
Training? training = Context.Trainings
|
||||||
|
.FirstOrDefault(t => t.Name == part && t.Type == type);
|
||||||
|
|
||||||
|
if (training == null)
|
||||||
|
{
|
||||||
|
training = new Training()
|
||||||
|
{
|
||||||
|
Name = part,
|
||||||
|
Type = type,
|
||||||
|
};
|
||||||
|
|
||||||
|
Context.Trainings.Add(training);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClassTraining classTraining = new()
|
||||||
|
{
|
||||||
|
Class = Object,
|
||||||
|
Training = training,
|
||||||
|
Stage = stage
|
||||||
|
};
|
||||||
|
|
||||||
|
trainings.Add(classTraining);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return trainings;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string[] GetTrainingString(string value)
|
||||||
|
{
|
||||||
|
if (value.StartsWith("favored weapon of your deity"))
|
||||||
|
{
|
||||||
|
return ["Favored weapon of your deity"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == "simple and martial weapons")
|
||||||
|
{
|
||||||
|
return ["Simple weapon", "Martial weapon"];
|
||||||
|
}
|
||||||
|
|
||||||
|
return Regex.Split(value, @"\s*(?:,|and)\s*")
|
||||||
|
.Where(s => s != "")
|
||||||
|
.Select(s => string.Concat(s[0].ToString().ToUpper(), s.AsSpan(1)))
|
||||||
|
.ToArray();
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ICollection<ClassTraining> GetSaveTrainings()
|
||||||
|
{
|
||||||
|
Dictionary<string, Training> result = Context.Trainings
|
||||||
|
.Where(t => t.Type == TrainingType.Save)
|
||||||
|
.ToDictionary(t => t.Name);
|
||||||
|
|
||||||
|
foreach (string name in new[] { "Will", "Fortitude", "Reflex", "Perception" })
|
||||||
|
{
|
||||||
|
if (result.ContainsKey(name))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Training training = new() { Name = name, Type = (name == "Perception") ? TrainingType.Perception : TrainingType.Save };
|
||||||
|
|
||||||
|
result.Add(name, training);
|
||||||
|
Context.Trainings.Add(training);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.Select(pair =>
|
||||||
|
{
|
||||||
|
ClassTraining classTraining = new()
|
||||||
|
{
|
||||||
|
Class = Object,
|
||||||
|
Training = pair.Value,
|
||||||
|
Stage = Input.EnumRequired<TrainingStage>($"{pair.Key.ToLower()}_proficiency"),
|
||||||
|
};
|
||||||
|
|
||||||
|
return classTraining;
|
||||||
|
}).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
+61
@@ -0,0 +1,61 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
|
using Pf2eModel.Model.Structure;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
|
[AonprdProcessor("feat", ["trait", "source", "skill"])]
|
||||||
|
internal class FeatProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
|
{
|
||||||
|
public override EntityType Type => EntityType.Feat;
|
||||||
|
|
||||||
|
public override Feat Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Feats.Add(Object);
|
||||||
|
|
||||||
|
public override void Process()
|
||||||
|
{
|
||||||
|
base.Process();
|
||||||
|
|
||||||
|
Object.Level = Input.GetRequired<int>("level");
|
||||||
|
|
||||||
|
|
||||||
|
AonprdProcessorInput.ActionStruct action = Input.ResolveActionString(Input.GetOptional<string>("actions") ?? "");
|
||||||
|
Object.Actions = action.Actions;
|
||||||
|
Object.MaxActions = action.MaxActions;
|
||||||
|
Object.IsFreeAction = action.IsFreeAction;
|
||||||
|
Object.IsPassive = action.IsPassive;
|
||||||
|
Object.IsReaction = action.IsReaction;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Object.Extra = GenerateExtra(
|
||||||
|
"archetype",
|
||||||
|
"element",
|
||||||
|
"heighten",
|
||||||
|
"heighten_group",
|
||||||
|
"heighten_level",
|
||||||
|
"school",
|
||||||
|
"frequency"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override string GetDescription()
|
||||||
|
=> base.GetDescription() + AddedDescription([
|
||||||
|
"cost_markdown",
|
||||||
|
"feat_markdown",
|
||||||
|
"summary_markdown",
|
||||||
|
"prerequisite_markdown",
|
||||||
|
"requirement_markdown",
|
||||||
|
"trigger_markdown"
|
||||||
|
]);
|
||||||
|
}
|
||||||
+9
-3
@@ -4,10 +4,16 @@ using Pf2eModel.Model.Structure;
|
|||||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
[AonprdProcessor("language")]
|
[AonprdProcessor("language")]
|
||||||
internal class LanguageProcessor(ProcessorInput input) : AbstractProcessor(input)
|
internal class LanguageProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
{
|
{
|
||||||
public override EntityType Type { get; } = EntityType.Language;
|
public override EntityType Type => EntityType.Language;
|
||||||
|
|
||||||
public override Language Object { get; } = new Language();
|
public override Language Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Languages.Add(Object);
|
||||||
|
|
||||||
|
public override void Process()
|
||||||
|
{
|
||||||
|
base.Process();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
using Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
||||||
|
using Pf2eModel.Model;
|
||||||
|
using Pf2eModel.Model.Base.Source;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
|
[AonprdProcessor("source", new string[] { })]
|
||||||
|
internal class SourceProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
|
{
|
||||||
|
public override EntityType Type => EntityType.Unknown;
|
||||||
|
|
||||||
|
public override IEntity Object => null;
|
||||||
|
|
||||||
|
protected override void Add() { }
|
||||||
|
|
||||||
|
public override void Process()
|
||||||
|
{
|
||||||
|
// base.Process();
|
||||||
|
|
||||||
|
Source source = new()
|
||||||
|
{
|
||||||
|
Name = Input.GetRequired<string>("name"),
|
||||||
|
Category = Input.EnumRequired<SourceCategory>("primary_source_category"),
|
||||||
|
ReleaseDate = DateOnly.Parse(Input.GetRequired<string>("release_date")),
|
||||||
|
};
|
||||||
|
|
||||||
|
Context.Sources.Add(source);
|
||||||
|
}
|
||||||
|
}
|
||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
using Pf2eModel.Model.Base.Source;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
|
using Pf2eModel.Model;
|
||||||
|
using Pf2eModel.Model.Common;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
|
[AonprdProcessor("skill", new string[] { })]
|
||||||
|
internal class TrainingProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
|
{
|
||||||
|
public override EntityType Type => EntityType.Unknown;
|
||||||
|
|
||||||
|
public override IEntity Object => null;
|
||||||
|
|
||||||
|
protected override void Add() { }
|
||||||
|
|
||||||
|
public override void Process()
|
||||||
|
{
|
||||||
|
// base.Process();
|
||||||
|
|
||||||
|
Training training = new()
|
||||||
|
{
|
||||||
|
Name = Input.GetRequired<string>("name"),
|
||||||
|
Type = TrainingType.Skill,
|
||||||
|
};
|
||||||
|
|
||||||
|
Context.Trainings.Add(training);
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-1
@@ -4,12 +4,14 @@ using Pf2eModel.Model.Structure;
|
|||||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.Processors;
|
||||||
|
|
||||||
[AonprdProcessor("trait", new string[] { })]
|
[AonprdProcessor("trait", new string[] { })]
|
||||||
internal class TraitProcessor(ProcessorInput input) : AbstractProcessor(input)
|
internal class TraitProcessor(AonprdProcessorInput input) : AbstractProcessor(input)
|
||||||
{
|
{
|
||||||
public override EntityType Type => EntityType.Trait;
|
public override EntityType Type => EntityType.Trait;
|
||||||
|
|
||||||
public override Trait Object { get; } = new();
|
public override Trait Object { get; } = new();
|
||||||
|
|
||||||
|
protected override void Add() => Context.Traits.Add(Object);
|
||||||
|
|
||||||
public override void Process()
|
public override void Process()
|
||||||
{
|
{
|
||||||
base.Process();
|
base.Process();
|
||||||
|
|||||||
+115
-39
@@ -13,7 +13,7 @@ using Pf2eModel.Model.Enum;
|
|||||||
namespace Pf2eModel.Migrations
|
namespace Pf2eModel.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(Pf2eDbContext))]
|
[DbContext(typeof(Pf2eDbContext))]
|
||||||
[Migration("20250418174520_1")]
|
[Migration("20250420145024_1")]
|
||||||
partial class _1
|
partial class _1
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -25,7 +25,6 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_category", new[] { "unknown", "offensive", "defensive", "interaction", "familiar", "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_category", new[] { "unknown", "offensive", "defensive", "interaction", "familiar", "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_type", new[] { "none", "1_action", "2_actions", "3_actions", "1-3_actions", "1-2_actions" });
|
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "legacy", "english", "legacy_english", "hobby", "other" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "legacy", "english", "legacy_english", "hobby", "other" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "ancestry_vision", new[] { "normal", "low-light-vision", "dark-vision" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "ancestry_vision", new[] { "normal", "low-light-vision", "dark-vision" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "attribute_values", new[] { "free", "str", "dex", "con", "int", "wis", "cha" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "attribute_values", new[] { "free", "str", "dex", "con", "int", "wis", "cha" });
|
||||||
@@ -35,7 +34,7 @@ namespace Pf2eModel.Migrations
|
|||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_fonts", new[] { "none", "heal", "harm", "any" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_fonts", new[] { "none", "heal", "harm", "any" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_sanctification", new[] { "holy", "unholy", "any" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_sanctification", new[] { "holy", "unholy", "any" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_rarity", new[] { "common", "uncommon", "rare", "unique" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_rarity", new[] { "common", "uncommon", "rare", "unique" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_type", new[] { "unknown", "trait", "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell", "language" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_type", new[] { "unknown", "trait", "action", "ancestry", "archetype", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell", "language" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_action_type", new[] { "passive", "action", "reaction", "free" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_action_type", new[] { "passive", "action", "reaction", "free" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon", "campaign_feature" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon", "campaign_feature" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "size", new[] { "tiny", "small", "medium", "large" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "size", new[] { "tiny", "small", "medium", "large" });
|
||||||
@@ -435,13 +434,18 @@ namespace Pf2eModel.Migrations
|
|||||||
|
|
||||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
b.Property<string>("Key")
|
b.Property<string>("Name")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(255)
|
.HasMaxLength(255)
|
||||||
.HasColumnType("character varying(255)")
|
.HasColumnType("character varying(255)")
|
||||||
.HasColumnName("key")
|
.HasColumnName("name")
|
||||||
.HasColumnOrder(2);
|
.HasColumnOrder(2);
|
||||||
|
|
||||||
|
b.Property<int>("Type")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("type")
|
||||||
|
.HasColumnOrder(3);
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_trainings");
|
.HasName("pk_trainings");
|
||||||
|
|
||||||
@@ -485,11 +489,6 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasColumnName("max_actions")
|
.HasColumnName("max_actions")
|
||||||
.HasColumnOrder(4);
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
b.Property<ActionType>("Type")
|
|
||||||
.HasColumnType("action_type")
|
|
||||||
.HasColumnName("type")
|
|
||||||
.HasColumnOrder(2);
|
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_actions");
|
.HasName("pk_actions");
|
||||||
|
|
||||||
@@ -616,6 +615,38 @@ namespace Pf2eModel.Migrations
|
|||||||
b.ToTable("ancestry_languages", (string)null);
|
b.ToTable("ancestry_languages", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Archetype", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id")
|
||||||
|
.HasColumnOrder(1);
|
||||||
|
|
||||||
|
b.Property<int>("DedicationFeatId")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("dedication_feat_id")
|
||||||
|
.HasColumnOrder(3);
|
||||||
|
|
||||||
|
b.Property<string>("Extra")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("extra")
|
||||||
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
|
b.Property<int>("Level")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("level")
|
||||||
|
.HasColumnOrder(2);
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("pk_archetype");
|
||||||
|
|
||||||
|
b.HasIndex("DedicationFeatId")
|
||||||
|
.IsUnique()
|
||||||
|
.HasDatabaseName("ix_archetype_dedication_feat_id");
|
||||||
|
|
||||||
|
b.ToTable("archetype", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
@@ -632,10 +663,13 @@ namespace Pf2eModel.Migrations
|
|||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("id")
|
.HasColumnName("id")
|
||||||
.HasColumnOrder(1);
|
.HasColumnOrder(1);
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
b.Property<AttributeValues>("Attribute")
|
b.Property<AttributeValues>("Attribute")
|
||||||
.HasColumnType("attribute_values")
|
.HasColumnType("attribute_values")
|
||||||
.HasColumnName("attribute")
|
.HasColumnName("attribute")
|
||||||
@@ -725,7 +759,7 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Property<int>("AdditionalTrainedSkills")
|
b.Property<int>("AdditionalTrainedSkills")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("additional_trained_skills")
|
.HasColumnName("additional_trained_skills")
|
||||||
.HasColumnOrder(6);
|
.HasColumnOrder(7);
|
||||||
|
|
||||||
b.Property<int>("Hp")
|
b.Property<int>("Hp")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
@@ -742,6 +776,11 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasColumnName("spellcasting")
|
.HasColumnName("spellcasting")
|
||||||
.HasColumnOrder(5);
|
.HasColumnOrder(5);
|
||||||
|
|
||||||
|
b.Property<int>("Tradition")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("tradition")
|
||||||
|
.HasColumnOrder(6);
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_classes");
|
.HasName("pk_classes");
|
||||||
|
|
||||||
@@ -840,8 +879,8 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasColumnName("name")
|
.HasColumnName("name")
|
||||||
.HasColumnOrder(4);
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
b.Property<int>("Stage")
|
b.Property<TrainingStage>("Stage")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("training_stage")
|
||||||
.HasColumnName("stage")
|
.HasColumnName("stage")
|
||||||
.HasColumnOrder(5);
|
.HasColumnOrder(5);
|
||||||
|
|
||||||
@@ -1050,7 +1089,12 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Property<int?>("Actions")
|
b.Property<int?>("Actions")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("actions")
|
.HasColumnName("actions")
|
||||||
.HasColumnOrder(4);
|
.HasColumnOrder(5);
|
||||||
|
|
||||||
|
b.Property<int>("ArchetypeId")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("archetype_id")
|
||||||
|
.HasColumnOrder(10);
|
||||||
|
|
||||||
b.Property<ActionCategory>("Category")
|
b.Property<ActionCategory>("Category")
|
||||||
.HasColumnType("action_category")
|
.HasColumnType("action_category")
|
||||||
@@ -1060,42 +1104,39 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Property<string>("Extra")
|
b.Property<string>("Extra")
|
||||||
.HasColumnType("text")
|
.HasColumnType("text")
|
||||||
.HasColumnName("extra")
|
.HasColumnName("extra")
|
||||||
.HasColumnOrder(10);
|
.HasColumnOrder(11);
|
||||||
|
|
||||||
|
b.Property<bool>("IsFreeAction")
|
||||||
|
.HasColumnType("boolean")
|
||||||
|
.HasColumnName("is_free_action")
|
||||||
|
.HasColumnOrder(8);
|
||||||
|
|
||||||
|
b.Property<bool>("IsPassive")
|
||||||
|
.HasColumnType("boolean")
|
||||||
|
.HasColumnName("is_passive")
|
||||||
|
.HasColumnOrder(9);
|
||||||
|
|
||||||
|
b.Property<bool>("IsReaction")
|
||||||
|
.HasColumnType("boolean")
|
||||||
|
.HasColumnName("is_reaction")
|
||||||
|
.HasColumnOrder(7);
|
||||||
|
|
||||||
b.Property<int>("Level")
|
b.Property<int>("Level")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("level")
|
.HasColumnName("level")
|
||||||
.HasColumnOrder(5);
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
b.Property<int?>("LevelTaken")
|
b.Property<int?>("MaxActions")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("level_taken")
|
.HasColumnName("max_actions")
|
||||||
.HasColumnOrder(6);
|
.HasColumnOrder(6);
|
||||||
|
|
||||||
b.Property<string>("Location")
|
|
||||||
.HasMaxLength(255)
|
|
||||||
.HasColumnType("character varying(255)")
|
|
||||||
.HasColumnName("location")
|
|
||||||
.HasColumnOrder(8);
|
|
||||||
|
|
||||||
b.Property<int?>("MaxTakable")
|
|
||||||
.HasColumnType("integer")
|
|
||||||
.HasColumnName("max_takable")
|
|
||||||
.HasColumnOrder(7);
|
|
||||||
|
|
||||||
b.Property<bool?>("OnlyLevel1")
|
|
||||||
.HasColumnType("boolean")
|
|
||||||
.HasColumnName("only_level1")
|
|
||||||
.HasColumnOrder(9);
|
|
||||||
|
|
||||||
b.Property<ActionType>("Type")
|
|
||||||
.HasColumnType("action_type")
|
|
||||||
.HasColumnName("type")
|
|
||||||
.HasColumnOrder(2);
|
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_feats");
|
.HasName("pk_feats");
|
||||||
|
|
||||||
|
b.HasIndex("ArchetypeId")
|
||||||
|
.HasDatabaseName("ix_feats_archetype_id");
|
||||||
|
|
||||||
b.ToTable("feats", (string)null);
|
b.ToTable("feats", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1628,6 +1669,27 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Navigation("Language");
|
b.Navigation("Language");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Archetype", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Pf2eModel.Model.Structure.Feat", "DedicationFeat")
|
||||||
|
.WithOne()
|
||||||
|
.HasForeignKey("Pf2eModel.Model.Structure.Archetype", "DedicationFeatId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_archetype_feats_dedication_feat_id");
|
||||||
|
|
||||||
|
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
||||||
|
.WithOne()
|
||||||
|
.HasForeignKey("Pf2eModel.Model.Structure.Archetype", "Id")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_archetype_entities_id");
|
||||||
|
|
||||||
|
b.Navigation("DedicationFeat");
|
||||||
|
|
||||||
|
b.Navigation("Entity");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
||||||
@@ -1841,6 +1903,13 @@ namespace Pf2eModel.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b =>
|
||||||
{
|
{
|
||||||
|
b.HasOne("Pf2eModel.Model.Structure.Archetype", "Archetype")
|
||||||
|
.WithMany("Feats")
|
||||||
|
.HasForeignKey("ArchetypeId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_feats_archetype_archetype_id");
|
||||||
|
|
||||||
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
||||||
.WithOne()
|
.WithOne()
|
||||||
.HasForeignKey("Pf2eModel.Model.Structure.Feat", "Id")
|
.HasForeignKey("Pf2eModel.Model.Structure.Feat", "Id")
|
||||||
@@ -1848,6 +1917,8 @@ namespace Pf2eModel.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasConstraintName("fk_feats_entities_id");
|
.HasConstraintName("fk_feats_entities_id");
|
||||||
|
|
||||||
|
b.Navigation("Archetype");
|
||||||
|
|
||||||
b.Navigation("Entity");
|
b.Navigation("Entity");
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -2000,6 +2071,11 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Navigation("Heritages");
|
b.Navigation("Heritages");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Archetype", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Feats");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("BackgroundBoosts");
|
b.Navigation("BackgroundBoosts");
|
||||||
+116
-55
@@ -15,7 +15,6 @@ namespace Pf2eModel.Migrations
|
|||||||
{
|
{
|
||||||
migrationBuilder.AlterDatabase()
|
migrationBuilder.AlterDatabase()
|
||||||
.Annotation("Npgsql:Enum:action_category", "unknown,offensive,defensive,interaction,familiar,army_tactic,army_war_action,kingdom_activity,kingdom_feat,kingdom_feature")
|
.Annotation("Npgsql:Enum:action_category", "unknown,offensive,defensive,interaction,familiar,army_tactic,army_war_action,kingdom_activity,kingdom_feat,kingdom_feature")
|
||||||
.Annotation("Npgsql:Enum:action_type", "none,1_action,2_actions,3_actions,1-3_actions,1-2_actions")
|
|
||||||
.Annotation("Npgsql:Enum:alias_type", "legacy,english,legacy_english,hobby,other")
|
.Annotation("Npgsql:Enum:alias_type", "legacy,english,legacy_english,hobby,other")
|
||||||
.Annotation("Npgsql:Enum:ancestry_vision", "normal,low-light-vision,dark-vision")
|
.Annotation("Npgsql:Enum:ancestry_vision", "normal,low-light-vision,dark-vision")
|
||||||
.Annotation("Npgsql:Enum:attribute_values", "free,str,dex,con,int,wis,cha")
|
.Annotation("Npgsql:Enum:attribute_values", "free,str,dex,con,int,wis,cha")
|
||||||
@@ -25,7 +24,7 @@ namespace Pf2eModel.Migrations
|
|||||||
.Annotation("Npgsql:Enum:deity_fonts", "none,heal,harm,any")
|
.Annotation("Npgsql:Enum:deity_fonts", "none,heal,harm,any")
|
||||||
.Annotation("Npgsql:Enum:deity_sanctification", "holy,unholy,any")
|
.Annotation("Npgsql:Enum:deity_sanctification", "holy,unholy,any")
|
||||||
.Annotation("Npgsql:Enum:entity_rarity", "common,uncommon,rare,unique")
|
.Annotation("Npgsql:Enum:entity_rarity", "common,uncommon,rare,unique")
|
||||||
.Annotation("Npgsql:Enum:entity_type", "unknown,trait,action,ancestry,background,backpack,campaign_feature,class,condition,deity,feat,heritage,spell,language")
|
.Annotation("Npgsql:Enum:entity_type", "unknown,trait,action,ancestry,archetype,background,backpack,campaign_feature,class,condition,deity,feat,heritage,spell,language")
|
||||||
.Annotation("Npgsql:Enum:feat_action_type", "passive,action,reaction,free")
|
.Annotation("Npgsql:Enum:feat_action_type", "passive,action,reaction,free")
|
||||||
.Annotation("Npgsql:Enum:feat_category", "ancestryfeature,classfeature,calling,class,skill,general,ancestry,bonus,deityboon,curse,pfsboon,campaign_feature")
|
.Annotation("Npgsql:Enum:feat_category", "ancestryfeature,classfeature,calling,class,skill,general,ancestry,bonus,deityboon,curse,pfsboon,campaign_feature")
|
||||||
.Annotation("Npgsql:Enum:size", "tiny,small,medium,large")
|
.Annotation("Npgsql:Enum:size", "tiny,small,medium,large")
|
||||||
@@ -120,7 +119,8 @@ namespace Pf2eModel.Migrations
|
|||||||
{
|
{
|
||||||
id = table.Column<int>(type: "integer", nullable: false)
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
key = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false)
|
name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
||||||
|
type = table.Column<int>(type: "integer", nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
@@ -132,7 +132,6 @@ namespace Pf2eModel.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
id = table.Column<int>(type: "integer", nullable: false),
|
id = table.Column<int>(type: "integer", nullable: false),
|
||||||
type = table.Column<ActionType>(type: "action_type", nullable: false),
|
|
||||||
actions = table.Column<int>(type: "integer", nullable: true),
|
actions = table.Column<int>(type: "integer", nullable: true),
|
||||||
max_actions = table.Column<int>(type: "integer", nullable: true),
|
max_actions = table.Column<int>(type: "integer", nullable: true),
|
||||||
is_reaction = table.Column<bool>(type: "boolean", nullable: false),
|
is_reaction = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
@@ -197,6 +196,7 @@ namespace Pf2eModel.Migrations
|
|||||||
hp = table.Column<int>(type: "integer", nullable: false),
|
hp = table.Column<int>(type: "integer", nullable: false),
|
||||||
perception = table.Column<int>(type: "integer", nullable: false),
|
perception = table.Column<int>(type: "integer", nullable: false),
|
||||||
spellcasting = table.Column<bool>(type: "boolean", nullable: false),
|
spellcasting = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
tradition = table.Column<int>(type: "integer", nullable: false),
|
||||||
additional_trained_skills = table.Column<int>(type: "integer", nullable: false)
|
additional_trained_skills = table.Column<int>(type: "integer", nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
@@ -269,32 +269,6 @@ namespace Pf2eModel.Migrations
|
|||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "feats",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
id = table.Column<int>(type: "integer", nullable: false),
|
|
||||||
type = table.Column<ActionType>(type: "action_type", nullable: false),
|
|
||||||
category = table.Column<ActionCategory>(type: "action_category", nullable: false),
|
|
||||||
actions = table.Column<int>(type: "integer", nullable: true),
|
|
||||||
level = table.Column<int>(type: "integer", nullable: false),
|
|
||||||
level_taken = table.Column<int>(type: "integer", nullable: true),
|
|
||||||
max_takable = table.Column<int>(type: "integer", nullable: true),
|
|
||||||
location = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
||||||
only_level1 = table.Column<bool>(type: "boolean", nullable: true),
|
|
||||||
extra = table.Column<string>(type: "text", nullable: true)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("pk_feats", x => x.id);
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "fk_feats_entities_id",
|
|
||||||
column: x => x.id,
|
|
||||||
principalTable: "entities",
|
|
||||||
principalColumn: "id",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "languages",
|
name: "languages",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
@@ -529,7 +503,8 @@ namespace Pf2eModel.Migrations
|
|||||||
name: "background_boosts",
|
name: "background_boosts",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
id = table.Column<int>(type: "integer", nullable: false),
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
background_id = table.Column<int>(type: "integer", nullable: false),
|
background_id = table.Column<int>(type: "integer", nullable: false),
|
||||||
attribute = table.Column<AttributeValues>(type: "attribute_values", nullable: false)
|
attribute = table.Column<AttributeValues>(type: "attribute_values", nullable: false)
|
||||||
},
|
},
|
||||||
@@ -652,7 +627,7 @@ namespace Pf2eModel.Migrations
|
|||||||
class_id = table.Column<int>(type: "integer", nullable: false),
|
class_id = table.Column<int>(type: "integer", nullable: false),
|
||||||
training_id = table.Column<int>(type: "integer", nullable: true),
|
training_id = table.Column<int>(type: "integer", nullable: true),
|
||||||
name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
||||||
stage = table.Column<int>(type: "integer", nullable: false)
|
stage = table.Column<TrainingStage>(type: "training_stage", nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
@@ -754,26 +729,6 @@ namespace Pf2eModel.Migrations
|
|||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "feat_prerequisites",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
id = table.Column<int>(type: "integer", nullable: false)
|
|
||||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
||||||
feat_id = table.Column<int>(type: "integer", nullable: false),
|
|
||||||
value = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("pk_feat_prerequisites", x => x.id);
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "fk_feat_prerequisites_feats_feat_id",
|
|
||||||
column: x => x.feat_id,
|
|
||||||
principalTable: "feats",
|
|
||||||
principalColumn: "id",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "ancestry_languages",
|
name: "ancestry_languages",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
@@ -938,6 +893,78 @@ namespace Pf2eModel.Migrations
|
|||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "archetype",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
level = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
dedication_feat_id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
extra = table.Column<string>(type: "text", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("pk_archetype", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_archetype_entities_id",
|
||||||
|
column: x => x.id,
|
||||||
|
principalTable: "entities",
|
||||||
|
principalColumn: "id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "feats",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
category = table.Column<ActionCategory>(type: "action_category", nullable: false),
|
||||||
|
level = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
actions = table.Column<int>(type: "integer", nullable: true),
|
||||||
|
max_actions = table.Column<int>(type: "integer", nullable: true),
|
||||||
|
is_reaction = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
is_free_action = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
is_passive = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
archetype_id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
extra = table.Column<string>(type: "text", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("pk_feats", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_feats_archetype_archetype_id",
|
||||||
|
column: x => x.archetype_id,
|
||||||
|
principalTable: "archetype",
|
||||||
|
principalColumn: "id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_feats_entities_id",
|
||||||
|
column: x => x.id,
|
||||||
|
principalTable: "entities",
|
||||||
|
principalColumn: "id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "feat_prerequisites",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
feat_id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
value = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("pk_feat_prerequisites", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_feat_prerequisites_feats_feat_id",
|
||||||
|
column: x => x.feat_id,
|
||||||
|
principalTable: "feats",
|
||||||
|
principalColumn: "id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "ix_ancestry_boosts_ancestry_id",
|
name: "ix_ancestry_boosts_ancestry_id",
|
||||||
table: "ancestry_boosts",
|
table: "ancestry_boosts",
|
||||||
@@ -953,6 +980,12 @@ namespace Pf2eModel.Migrations
|
|||||||
table: "ancestry_languages",
|
table: "ancestry_languages",
|
||||||
column: "language_id");
|
column: "language_id");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "ix_archetype_dedication_feat_id",
|
||||||
|
table: "archetype",
|
||||||
|
column: "dedication_feat_id",
|
||||||
|
unique: true);
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "ix_background_boosts_background_id",
|
name: "ix_background_boosts_background_id",
|
||||||
table: "background_boosts",
|
table: "background_boosts",
|
||||||
@@ -1048,6 +1081,11 @@ namespace Pf2eModel.Migrations
|
|||||||
table: "feat_prerequisites",
|
table: "feat_prerequisites",
|
||||||
column: "feat_id");
|
column: "feat_id");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "ix_feats_archetype_id",
|
||||||
|
table: "feats",
|
||||||
|
column: "archetype_id");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "ix_heritages_ancestry_id",
|
name: "ix_heritages_ancestry_id",
|
||||||
table: "heritages",
|
table: "heritages",
|
||||||
@@ -1072,11 +1110,31 @@ namespace Pf2eModel.Migrations
|
|||||||
name: "ix_spell_defenses_spell_id",
|
name: "ix_spell_defenses_spell_id",
|
||||||
table: "spell_defenses",
|
table: "spell_defenses",
|
||||||
column: "spell_id");
|
column: "spell_id");
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "fk_archetype_feats_dedication_feat_id",
|
||||||
|
table: "archetype",
|
||||||
|
column: "dedication_feat_id",
|
||||||
|
principalTable: "feats",
|
||||||
|
principalColumn: "id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "fk_archetype_entities_id",
|
||||||
|
table: "archetype");
|
||||||
|
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "fk_feats_entities_id",
|
||||||
|
table: "feats");
|
||||||
|
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "fk_archetype_feats_dedication_feat_id",
|
||||||
|
table: "archetype");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "actions");
|
name: "actions");
|
||||||
|
|
||||||
@@ -1188,9 +1246,6 @@ namespace Pf2eModel.Migrations
|
|||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "traits");
|
name: "traits");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "feats");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "ancestries");
|
name: "ancestries");
|
||||||
|
|
||||||
@@ -1202,6 +1257,12 @@ namespace Pf2eModel.Migrations
|
|||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "entities");
|
name: "entities");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "feats");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "archetype");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,6 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_category", new[] { "unknown", "offensive", "defensive", "interaction", "familiar", "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_category", new[] { "unknown", "offensive", "defensive", "interaction", "familiar", "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "action_type", new[] { "none", "1_action", "2_actions", "3_actions", "1-3_actions", "1-2_actions" });
|
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "legacy", "english", "legacy_english", "hobby", "other" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "alias_type", new[] { "legacy", "english", "legacy_english", "hobby", "other" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "ancestry_vision", new[] { "normal", "low-light-vision", "dark-vision" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "ancestry_vision", new[] { "normal", "low-light-vision", "dark-vision" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "attribute_values", new[] { "free", "str", "dex", "con", "int", "wis", "cha" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "attribute_values", new[] { "free", "str", "dex", "con", "int", "wis", "cha" });
|
||||||
@@ -32,7 +31,7 @@ namespace Pf2eModel.Migrations
|
|||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_fonts", new[] { "none", "heal", "harm", "any" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_fonts", new[] { "none", "heal", "harm", "any" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_sanctification", new[] { "holy", "unholy", "any" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "deity_sanctification", new[] { "holy", "unholy", "any" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_rarity", new[] { "common", "uncommon", "rare", "unique" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_rarity", new[] { "common", "uncommon", "rare", "unique" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_type", new[] { "unknown", "trait", "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell", "language" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "entity_type", new[] { "unknown", "trait", "action", "ancestry", "archetype", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell", "language" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_action_type", new[] { "passive", "action", "reaction", "free" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_action_type", new[] { "passive", "action", "reaction", "free" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon", "campaign_feature" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon", "campaign_feature" });
|
||||||
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "size", new[] { "tiny", "small", "medium", "large" });
|
NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "size", new[] { "tiny", "small", "medium", "large" });
|
||||||
@@ -432,13 +431,18 @@ namespace Pf2eModel.Migrations
|
|||||||
|
|
||||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
b.Property<string>("Key")
|
b.Property<string>("Name")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(255)
|
.HasMaxLength(255)
|
||||||
.HasColumnType("character varying(255)")
|
.HasColumnType("character varying(255)")
|
||||||
.HasColumnName("key")
|
.HasColumnName("name")
|
||||||
.HasColumnOrder(2);
|
.HasColumnOrder(2);
|
||||||
|
|
||||||
|
b.Property<int>("Type")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("type")
|
||||||
|
.HasColumnOrder(3);
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_trainings");
|
.HasName("pk_trainings");
|
||||||
|
|
||||||
@@ -482,11 +486,6 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasColumnName("max_actions")
|
.HasColumnName("max_actions")
|
||||||
.HasColumnOrder(4);
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
b.Property<ActionType>("Type")
|
|
||||||
.HasColumnType("action_type")
|
|
||||||
.HasColumnName("type")
|
|
||||||
.HasColumnOrder(2);
|
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_actions");
|
.HasName("pk_actions");
|
||||||
|
|
||||||
@@ -613,6 +612,38 @@ namespace Pf2eModel.Migrations
|
|||||||
b.ToTable("ancestry_languages", (string)null);
|
b.ToTable("ancestry_languages", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Archetype", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id")
|
||||||
|
.HasColumnOrder(1);
|
||||||
|
|
||||||
|
b.Property<int>("DedicationFeatId")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("dedication_feat_id")
|
||||||
|
.HasColumnOrder(3);
|
||||||
|
|
||||||
|
b.Property<string>("Extra")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("extra")
|
||||||
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
|
b.Property<int>("Level")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("level")
|
||||||
|
.HasColumnOrder(2);
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("pk_archetype");
|
||||||
|
|
||||||
|
b.HasIndex("DedicationFeatId")
|
||||||
|
.IsUnique()
|
||||||
|
.HasDatabaseName("ix_archetype_dedication_feat_id");
|
||||||
|
|
||||||
|
b.ToTable("archetype", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
@@ -629,10 +660,13 @@ namespace Pf2eModel.Migrations
|
|||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.BackgroundRelation.BackgroundBoost", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("id")
|
.HasColumnName("id")
|
||||||
.HasColumnOrder(1);
|
.HasColumnOrder(1);
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
b.Property<AttributeValues>("Attribute")
|
b.Property<AttributeValues>("Attribute")
|
||||||
.HasColumnType("attribute_values")
|
.HasColumnType("attribute_values")
|
||||||
.HasColumnName("attribute")
|
.HasColumnName("attribute")
|
||||||
@@ -722,7 +756,7 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Property<int>("AdditionalTrainedSkills")
|
b.Property<int>("AdditionalTrainedSkills")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("additional_trained_skills")
|
.HasColumnName("additional_trained_skills")
|
||||||
.HasColumnOrder(6);
|
.HasColumnOrder(7);
|
||||||
|
|
||||||
b.Property<int>("Hp")
|
b.Property<int>("Hp")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
@@ -739,6 +773,11 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasColumnName("spellcasting")
|
.HasColumnName("spellcasting")
|
||||||
.HasColumnOrder(5);
|
.HasColumnOrder(5);
|
||||||
|
|
||||||
|
b.Property<int>("Tradition")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("tradition")
|
||||||
|
.HasColumnOrder(6);
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_classes");
|
.HasName("pk_classes");
|
||||||
|
|
||||||
@@ -837,8 +876,8 @@ namespace Pf2eModel.Migrations
|
|||||||
.HasColumnName("name")
|
.HasColumnName("name")
|
||||||
.HasColumnOrder(4);
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
b.Property<int>("Stage")
|
b.Property<TrainingStage>("Stage")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("training_stage")
|
||||||
.HasColumnName("stage")
|
.HasColumnName("stage")
|
||||||
.HasColumnOrder(5);
|
.HasColumnOrder(5);
|
||||||
|
|
||||||
@@ -1047,7 +1086,12 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Property<int?>("Actions")
|
b.Property<int?>("Actions")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("actions")
|
.HasColumnName("actions")
|
||||||
.HasColumnOrder(4);
|
.HasColumnOrder(5);
|
||||||
|
|
||||||
|
b.Property<int>("ArchetypeId")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("archetype_id")
|
||||||
|
.HasColumnOrder(10);
|
||||||
|
|
||||||
b.Property<ActionCategory>("Category")
|
b.Property<ActionCategory>("Category")
|
||||||
.HasColumnType("action_category")
|
.HasColumnType("action_category")
|
||||||
@@ -1057,42 +1101,39 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Property<string>("Extra")
|
b.Property<string>("Extra")
|
||||||
.HasColumnType("text")
|
.HasColumnType("text")
|
||||||
.HasColumnName("extra")
|
.HasColumnName("extra")
|
||||||
.HasColumnOrder(10);
|
.HasColumnOrder(11);
|
||||||
|
|
||||||
|
b.Property<bool>("IsFreeAction")
|
||||||
|
.HasColumnType("boolean")
|
||||||
|
.HasColumnName("is_free_action")
|
||||||
|
.HasColumnOrder(8);
|
||||||
|
|
||||||
|
b.Property<bool>("IsPassive")
|
||||||
|
.HasColumnType("boolean")
|
||||||
|
.HasColumnName("is_passive")
|
||||||
|
.HasColumnOrder(9);
|
||||||
|
|
||||||
|
b.Property<bool>("IsReaction")
|
||||||
|
.HasColumnType("boolean")
|
||||||
|
.HasColumnName("is_reaction")
|
||||||
|
.HasColumnOrder(7);
|
||||||
|
|
||||||
b.Property<int>("Level")
|
b.Property<int>("Level")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("level")
|
.HasColumnName("level")
|
||||||
.HasColumnOrder(5);
|
.HasColumnOrder(4);
|
||||||
|
|
||||||
b.Property<int?>("LevelTaken")
|
b.Property<int?>("MaxActions")
|
||||||
.HasColumnType("integer")
|
.HasColumnType("integer")
|
||||||
.HasColumnName("level_taken")
|
.HasColumnName("max_actions")
|
||||||
.HasColumnOrder(6);
|
.HasColumnOrder(6);
|
||||||
|
|
||||||
b.Property<string>("Location")
|
|
||||||
.HasMaxLength(255)
|
|
||||||
.HasColumnType("character varying(255)")
|
|
||||||
.HasColumnName("location")
|
|
||||||
.HasColumnOrder(8);
|
|
||||||
|
|
||||||
b.Property<int?>("MaxTakable")
|
|
||||||
.HasColumnType("integer")
|
|
||||||
.HasColumnName("max_takable")
|
|
||||||
.HasColumnOrder(7);
|
|
||||||
|
|
||||||
b.Property<bool?>("OnlyLevel1")
|
|
||||||
.HasColumnType("boolean")
|
|
||||||
.HasColumnName("only_level1")
|
|
||||||
.HasColumnOrder(9);
|
|
||||||
|
|
||||||
b.Property<ActionType>("Type")
|
|
||||||
.HasColumnType("action_type")
|
|
||||||
.HasColumnName("type")
|
|
||||||
.HasColumnOrder(2);
|
|
||||||
|
|
||||||
b.HasKey("Id")
|
b.HasKey("Id")
|
||||||
.HasName("pk_feats");
|
.HasName("pk_feats");
|
||||||
|
|
||||||
|
b.HasIndex("ArchetypeId")
|
||||||
|
.HasDatabaseName("ix_feats_archetype_id");
|
||||||
|
|
||||||
b.ToTable("feats", (string)null);
|
b.ToTable("feats", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1625,6 +1666,27 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Navigation("Language");
|
b.Navigation("Language");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Archetype", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Pf2eModel.Model.Structure.Feat", "DedicationFeat")
|
||||||
|
.WithOne()
|
||||||
|
.HasForeignKey("Pf2eModel.Model.Structure.Archetype", "DedicationFeatId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_archetype_feats_dedication_feat_id");
|
||||||
|
|
||||||
|
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
||||||
|
.WithOne()
|
||||||
|
.HasForeignKey("Pf2eModel.Model.Structure.Archetype", "Id")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_archetype_entities_id");
|
||||||
|
|
||||||
|
b.Navigation("DedicationFeat");
|
||||||
|
|
||||||
|
b.Navigation("Entity");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
||||||
@@ -1838,6 +1900,13 @@ namespace Pf2eModel.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Feat", b =>
|
||||||
{
|
{
|
||||||
|
b.HasOne("Pf2eModel.Model.Structure.Archetype", "Archetype")
|
||||||
|
.WithMany("Feats")
|
||||||
|
.HasForeignKey("ArchetypeId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_feats_archetype_archetype_id");
|
||||||
|
|
||||||
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
b.HasOne("Pf2eModel.Model.Base.Entity", "Entity")
|
||||||
.WithOne()
|
.WithOne()
|
||||||
.HasForeignKey("Pf2eModel.Model.Structure.Feat", "Id")
|
.HasForeignKey("Pf2eModel.Model.Structure.Feat", "Id")
|
||||||
@@ -1845,6 +1914,8 @@ namespace Pf2eModel.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasConstraintName("fk_feats_entities_id");
|
.HasConstraintName("fk_feats_entities_id");
|
||||||
|
|
||||||
|
b.Navigation("Archetype");
|
||||||
|
|
||||||
b.Navigation("Entity");
|
b.Navigation("Entity");
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1997,6 +2068,11 @@ namespace Pf2eModel.Migrations
|
|||||||
b.Navigation("Heritages");
|
b.Navigation("Heritages");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Archetype", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Feats");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
modelBuilder.Entity("Pf2eModel.Model.Structure.Background", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("BackgroundBoosts");
|
b.Navigation("BackgroundBoosts");
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using Pf2eModel.Model.Enum;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Pf2eModel.Model.Common;
|
namespace Pf2eModel.Model.Common;
|
||||||
@@ -12,5 +13,8 @@ public partial class Training
|
|||||||
|
|
||||||
[Column(Order = 2)]
|
[Column(Order = 2)]
|
||||||
[MaxLength(Pf2eDbContext.NameLength)]
|
[MaxLength(Pf2eDbContext.NameLength)]
|
||||||
public string Key { get; set; } = null!;
|
public string Name { get; set; } = null!;
|
||||||
|
|
||||||
|
[Column(Order = 3)]
|
||||||
|
public TrainingType Type { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
using NpgsqlTypes;
|
|
||||||
|
|
||||||
namespace Pf2eModel.Model.Enum;
|
|
||||||
|
|
||||||
public enum ActionType
|
|
||||||
{
|
|
||||||
[PgName("none")]
|
|
||||||
None,
|
|
||||||
|
|
||||||
[PgName("1_action")]
|
|
||||||
SingleAction,
|
|
||||||
|
|
||||||
[PgName("2_actions")]
|
|
||||||
TwoActions,
|
|
||||||
|
|
||||||
[PgName("3_actions")]
|
|
||||||
ThreeActions,
|
|
||||||
|
|
||||||
[PgName("1-3_actions")]
|
|
||||||
SingleToThreeActions,
|
|
||||||
|
|
||||||
[PgName("1-2_actions")]
|
|
||||||
SingleToTwoActions,
|
|
||||||
}
|
|
||||||
@@ -16,6 +16,9 @@ public enum EntityType
|
|||||||
[PgName("ancestry")]
|
[PgName("ancestry")]
|
||||||
Ancestry,
|
Ancestry,
|
||||||
|
|
||||||
|
[PgName("archetype")]
|
||||||
|
Archetype,
|
||||||
|
|
||||||
[PgName("background")]
|
[PgName("background")]
|
||||||
Background,
|
Background,
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using NpgsqlTypes;
|
||||||
|
|
||||||
|
namespace Pf2eModel.Model.Enum;
|
||||||
|
|
||||||
|
public enum SpellTradition
|
||||||
|
{
|
||||||
|
[PgName("none")]
|
||||||
|
None,
|
||||||
|
|
||||||
|
[PgName("divine")]
|
||||||
|
Divine,
|
||||||
|
|
||||||
|
[PgName("occult")]
|
||||||
|
Occult,
|
||||||
|
|
||||||
|
[PgName("arcane")]
|
||||||
|
Arcane,
|
||||||
|
|
||||||
|
[PgName("primal")]
|
||||||
|
Primal,
|
||||||
|
|
||||||
|
[PgName("all")]
|
||||||
|
All,
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using NpgsqlTypes;
|
||||||
|
|
||||||
|
namespace Pf2eModel.Model.Enum;
|
||||||
|
public enum TrainingType
|
||||||
|
{
|
||||||
|
[PgName("perception")]
|
||||||
|
Perception,
|
||||||
|
|
||||||
|
[PgName("skill")]
|
||||||
|
Skill,
|
||||||
|
|
||||||
|
[PgName("lore")]
|
||||||
|
Lore,
|
||||||
|
|
||||||
|
[PgName("weapon")]
|
||||||
|
Weapon,
|
||||||
|
|
||||||
|
[PgName("armor")]
|
||||||
|
Armor,
|
||||||
|
|
||||||
|
[PgName("save")]
|
||||||
|
Save,
|
||||||
|
}
|
||||||
@@ -12,9 +12,6 @@ public partial class Action : IEntity
|
|||||||
[Column(Order = 1)]
|
[Column(Order = 1)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Column(Order = 2)]
|
|
||||||
public ActionType Type { get; set; }
|
|
||||||
|
|
||||||
[Column(Order = 3)]
|
[Column(Order = 3)]
|
||||||
public int? Actions { get; set; } = null;
|
public int? Actions { get; set; } = null;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using Newtonsoft.Json;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Pf2eModel.Model.Structure.AncestryRelation;
|
namespace Pf2eModel.Model.Structure.AncestryRelation;
|
||||||
@@ -19,5 +20,6 @@ public partial class AncestryBoost
|
|||||||
[Column(Order = 4)]
|
[Column(Order = 4)]
|
||||||
public Enum.AttributeValues Value { get; set; }
|
public Enum.AttributeValues Value { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Ancestry Ancestry { get; set; } = null!;
|
public virtual Ancestry Ancestry { get; set; } = null!;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using Pf2eModel.Model.Base;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Pf2eModel.Model.Structure;
|
||||||
|
|
||||||
|
public class Archetype : IEntity
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
[Column(Order = 1)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public Entity Entity { get; set; } = null!;
|
||||||
|
|
||||||
|
[Column(Order = 2)]
|
||||||
|
public int Level { get; set; }
|
||||||
|
|
||||||
|
[Column(Order = 3)]
|
||||||
|
public int DedicationFeatId { get; set; }
|
||||||
|
|
||||||
|
[Column(Order = 4)]
|
||||||
|
public string? Extra { get; set; }
|
||||||
|
|
||||||
|
public Feat DedicationFeat { get; set; } = null!;
|
||||||
|
|
||||||
|
public virtual ICollection<Feat> Feats { get; set; } = [];
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using Pf2eModel.Model.Enum;
|
using Newtonsoft.Json;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
@@ -7,7 +8,7 @@ namespace Pf2eModel.Model.Structure.BackgroundRelation;
|
|||||||
public partial class BackgroundBoost
|
public partial class BackgroundBoost
|
||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
[Column(Order = 1)]
|
[Column(Order = 1)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
@@ -17,5 +18,6 @@ public partial class BackgroundBoost
|
|||||||
[Column(Order = 3)]
|
[Column(Order = 3)]
|
||||||
public AttributeValues Attribute { get; set; }
|
public AttributeValues Attribute { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Background Background { get; set; } = null!;
|
public virtual Background Background { get; set; } = null!;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Pf2eModel.Model.Base;
|
using Pf2eModel.Model.Base;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
@@ -16,6 +17,7 @@ public partial class BackgroundItem
|
|||||||
[Column(Order = 3)]
|
[Column(Order = 3)]
|
||||||
public int? Level { get; set; }
|
public int? Level { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Background Background { get; set; } = null!;
|
public virtual Background Background { get; set; } = null!;
|
||||||
|
|
||||||
public virtual Entity Entity { get; set; } = null!;
|
public virtual Entity Entity { get; set; } = null!;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Pf2eModel.Model.Common;
|
using Newtonsoft.Json;
|
||||||
|
using Pf2eModel.Model.Common;
|
||||||
using Pf2eModel.Model.Enum;
|
using Pf2eModel.Model.Enum;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
@@ -21,6 +22,7 @@ public partial class BackgroundTraining
|
|||||||
[Column(Order = 4)]
|
[Column(Order = 4)]
|
||||||
public TrainingStage Level { get; set; }
|
public TrainingStage Level { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Background Background { get; set; } = null!;
|
public virtual Background Background { get; set; } = null!;
|
||||||
|
|
||||||
public virtual Training Training { get; set; } = null!;
|
public virtual Training Training { get; set; } = null!;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ public partial class Class : IEntity
|
|||||||
[Column(Order = 1)]
|
[Column(Order = 1)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
[Column(Order = 2)]
|
|
||||||
public Entity Entity { get; set; } = null!;
|
public Entity Entity { get; set; } = null!;
|
||||||
|
|
||||||
[Column(Order = 3)]
|
[Column(Order = 3)]
|
||||||
@@ -26,6 +25,9 @@ public partial class Class : IEntity
|
|||||||
public bool Spellcasting { get; set; }
|
public bool Spellcasting { get; set; }
|
||||||
|
|
||||||
[Column(Order = 6)]
|
[Column(Order = 6)]
|
||||||
|
public SpellTradition Tradition { get; set; }
|
||||||
|
|
||||||
|
[Column(Order = 7)]
|
||||||
public int AdditionalTrainedSkills { get; set; }
|
public int AdditionalTrainedSkills { get; set; }
|
||||||
|
|
||||||
public virtual ICollection<ClassKeyAbility> ClassKeyAbilities { get; set; } = [];
|
public virtual ICollection<ClassKeyAbility> ClassKeyAbilities { get; set; } = [];
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Pf2eModel.Model.Enum;
|
using Newtonsoft.Json;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
@@ -17,5 +18,6 @@ public partial class ClassKeyAbility
|
|||||||
[Column(Order = 3)]
|
[Column(Order = 3)]
|
||||||
public AttributeValues Value { get; set; }
|
public AttributeValues Value { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Class Class { get; set; } = null!;
|
public virtual Class Class { get; set; } = null!;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Pf2eModel.Model.Base;
|
using Newtonsoft.Json;
|
||||||
|
using Pf2eModel.Model.Base;
|
||||||
using Pf2eModel.Model.Enum;
|
using Pf2eModel.Model.Enum;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
@@ -23,6 +24,7 @@ public partial class ClassProgression
|
|||||||
[Column(Order = 5)]
|
[Column(Order = 5)]
|
||||||
public int? EntityId { get; set; }
|
public int? EntityId { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Class Class { get; set; } = null!;
|
public virtual Class Class { get; set; } = null!;
|
||||||
|
|
||||||
public virtual Entity? Entity { get; set; }
|
public virtual Entity? Entity { get; set; }
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using Pf2eModel.Model.Common;
|
using Newtonsoft.Json;
|
||||||
|
using Pf2eModel.Model.Common;
|
||||||
|
using Pf2eModel.Model.Enum;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
@@ -22,8 +24,9 @@ public partial class ClassTraining
|
|||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
[Column(Order = 5)]
|
[Column(Order = 5)]
|
||||||
public int Stage { get; set; }
|
public TrainingStage Stage { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public virtual Class Class { get; set; } = null!;
|
public virtual Class Class { get; set; } = null!;
|
||||||
|
|
||||||
public virtual Training? Training { get; set; }
|
public virtual Training? Training { get; set; }
|
||||||
|
|||||||
@@ -16,33 +16,34 @@ public partial class Feat : IEntity
|
|||||||
|
|
||||||
public Entity Entity { get; set; } = null!;
|
public Entity Entity { get; set; } = null!;
|
||||||
|
|
||||||
[Column(Order = 2)]
|
|
||||||
public ActionType Type { get; set; }
|
|
||||||
|
|
||||||
[Column(Order = 3)]
|
[Column(Order = 3)]
|
||||||
public ActionCategory Category { get; set; }
|
public ActionCategory Category { get; set; }
|
||||||
|
|
||||||
[Column(Order = 4)]
|
[Column(Order = 4)]
|
||||||
public int? Actions { get; set; }
|
|
||||||
|
|
||||||
[Column(Order = 5)]
|
|
||||||
public int Level { get; set; }
|
public int Level { get; set; }
|
||||||
|
|
||||||
|
[Column(Order = 5)]
|
||||||
|
public int? Actions { get; set; } = null;
|
||||||
|
|
||||||
[Column(Order = 6)]
|
[Column(Order = 6)]
|
||||||
public int? LevelTaken { get; set; }
|
public int? MaxActions { get; set; } = null;
|
||||||
|
|
||||||
[Column(Order = 7)]
|
[Column(Order = 7)]
|
||||||
public int? MaxTakable { get; set; }
|
public bool IsReaction { get; set; } = false;
|
||||||
|
|
||||||
[Column(Order = 8)]
|
[Column(Order = 8)]
|
||||||
[MaxLength(255)]
|
public bool IsFreeAction { get; set; } = false;
|
||||||
public string? Location { get; set; }
|
|
||||||
|
|
||||||
[Column(Order = 9)]
|
[Column(Order = 9)]
|
||||||
public bool? OnlyLevel1 { get; set; }
|
public bool IsPassive { get; set; } = false;
|
||||||
|
|
||||||
[Column(Order = 10)]
|
[Column(Order = 10)]
|
||||||
|
public int ArchetypeId { get; set; }
|
||||||
|
|
||||||
|
[Column(Order = 11)]
|
||||||
public string? Extra { get; set; }
|
public string? Extra { get; set; }
|
||||||
|
|
||||||
|
public Archetype Archetype { get; set; } = null!;
|
||||||
|
|
||||||
public virtual ICollection<FeatPrerequisite> FeatPrerequisites { get; set; } = [];
|
public virtual ICollection<FeatPrerequisite> FeatPrerequisites { get; set; } = [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ public partial class Pf2eDbContext : DbContext
|
|||||||
.MapEnum<EntityRarity>()
|
.MapEnum<EntityRarity>()
|
||||||
.MapEnum<AliasType>()
|
.MapEnum<AliasType>()
|
||||||
.MapEnum<TraitType>()
|
.MapEnum<TraitType>()
|
||||||
.MapEnum<ActionType>()
|
|
||||||
.MapEnum<ActionCategory>()
|
.MapEnum<ActionCategory>()
|
||||||
.MapEnum<Size>()
|
.MapEnum<Size>()
|
||||||
.MapEnum<AncestryVision>()
|
.MapEnum<AncestryVision>()
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ public partial class Pf2eDbContext
|
|||||||
.HasPostgresEnum<EntityRarity>()
|
.HasPostgresEnum<EntityRarity>()
|
||||||
.HasPostgresEnum<AliasType>()
|
.HasPostgresEnum<AliasType>()
|
||||||
.HasPostgresEnum<TraitType>()
|
.HasPostgresEnum<TraitType>()
|
||||||
.HasPostgresEnum<ActionType>()
|
|
||||||
.HasPostgresEnum<ActionCategory>()
|
.HasPostgresEnum<ActionCategory>()
|
||||||
.HasPostgresEnum<Size>()
|
.HasPostgresEnum<Size>()
|
||||||
.HasPostgresEnum<AncestryVision>()
|
.HasPostgresEnum<AncestryVision>()
|
||||||
@@ -171,6 +170,20 @@ public partial class Pf2eDbContext
|
|||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Archetype
|
||||||
|
modelBuilder.Entity<Archetype>(entity =>
|
||||||
|
{
|
||||||
|
BindEntity(entity);
|
||||||
|
|
||||||
|
entity.HasOne(a => a.DedicationFeat).WithOne()
|
||||||
|
.HasForeignKey<Archetype>(a => a.DedicationFeatId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
entity.HasMany(a => a.Feats).WithOne(f => f.Archetype)
|
||||||
|
.HasForeignKey(f => f.ArchetypeId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
// Background
|
// Background
|
||||||
modelBuilder.Entity<Background>(entity =>
|
modelBuilder.Entity<Background>(entity =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ internal class EntityConverter : JsonConverter
|
|||||||
|
|
||||||
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(source))
|
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(source))
|
||||||
{
|
{
|
||||||
|
if (property.Attributes.OfType<JsonIgnoreAttribute>().Any())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
object? v = property.GetValue(source);
|
object? v = property.GetValue(source);
|
||||||
dictionary.Add(property.Name, v);
|
dictionary.Add(property.Name, v);
|
||||||
}
|
}
|
||||||
|
|||||||
+59
-20
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using LinqToDB.Tools;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Converters;
|
using Newtonsoft.Json.Converters;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
@@ -7,6 +8,7 @@ using Pf2eModel;
|
|||||||
using Pf2eModel.Model;
|
using Pf2eModel.Model;
|
||||||
using Pf2eModel.Model.Base;
|
using Pf2eModel.Model.Base;
|
||||||
using Pf2eModel.Model.Enum;
|
using Pf2eModel.Model.Enum;
|
||||||
|
using static LinqToDB.Common.Configuration;
|
||||||
|
|
||||||
namespace Pf2eViewer;
|
namespace Pf2eViewer;
|
||||||
|
|
||||||
@@ -31,7 +33,7 @@ public partial class MainViewForm : Form
|
|||||||
TypesListBox.SelectedIndex = 0;
|
TypesListBox.SelectedIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public const int PerPage = 20;
|
public const int PerPage = 30;
|
||||||
|
|
||||||
public int Count;
|
public int Count;
|
||||||
|
|
||||||
@@ -50,6 +52,7 @@ public partial class MainViewForm : Form
|
|||||||
|
|
||||||
private void UpdateTreeView()
|
private void UpdateTreeView()
|
||||||
{
|
{
|
||||||
|
EntityTreeView.Nodes.Clear();
|
||||||
EntityType type = (EntityType) TypesListBox.SelectedItem!;
|
EntityType type = (EntityType) TypesListBox.SelectedItem!;
|
||||||
|
|
||||||
Count = Context.Entities.Count(e => e.Type == type);
|
Count = Context.Entities.Count(e => e.Type == type);
|
||||||
@@ -63,14 +66,6 @@ public partial class MainViewForm : Form
|
|||||||
EntityGridView.DataSource = Context.Entities
|
EntityGridView.DataSource = Context.Entities
|
||||||
.Where(e => e.Type == (EntityType) TypesListBox.SelectedItem)
|
.Where(e => e.Type == (EntityType) TypesListBox.SelectedItem)
|
||||||
.OrderBy(e => e.Id)
|
.OrderBy(e => e.Id)
|
||||||
.Include(e => e.Sources)
|
|
||||||
.ThenInclude(s => s.Source)
|
|
||||||
.Include(e => e.Aliases)
|
|
||||||
.Include(e => e.Keywords)
|
|
||||||
.Include(e => e.Externals)
|
|
||||||
.ThenInclude(x => x.Target)
|
|
||||||
.Include(e => e.Traits)
|
|
||||||
.ThenInclude(t => t.Entity)
|
|
||||||
.Select(e => new EntityGridRow(e))
|
.Select(e => new EntityGridRow(e))
|
||||||
.Skip((Page - 1) * PerPage)
|
.Skip((Page - 1) * PerPage)
|
||||||
.Take(PerPage)
|
.Take(PerPage)
|
||||||
@@ -99,22 +94,18 @@ public partial class MainViewForm : Form
|
|||||||
{
|
{
|
||||||
Page = 1;
|
Page = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PrevPageButton_Click(object sender, EventArgs e)
|
private void PrevPageButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Page--;
|
Page--;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void NextPageButton_Click(object sender, EventArgs e)
|
private void NextPageButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Page++;
|
Page++;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LastPageButton_Click(object sender, EventArgs e)
|
private void LastPageButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Page = MaxPage;
|
Page = MaxPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PageTextBox_KeyPress(object sender, KeyPressEventArgs e)
|
private void PageTextBox_KeyPress(object sender, KeyPressEventArgs e)
|
||||||
{
|
{
|
||||||
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
|
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
|
||||||
@@ -141,13 +132,42 @@ public partial class MainViewForm : Form
|
|||||||
|
|
||||||
EntityGridRow data = (EntityGridRow) row.DataBoundItem;
|
EntityGridRow data = (EntityGridRow) row.DataBoundItem;
|
||||||
|
|
||||||
string json = SerializeEntity(data.GetEntity());
|
ViewEntity(data.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ViewEntity(int id)
|
||||||
|
{
|
||||||
|
EntityTreeView.Nodes.Clear();
|
||||||
|
|
||||||
|
Entity? entity = Context.Entities
|
||||||
|
.Where(e => e.Id == id && e.Type == (EntityType) TypesListBox.SelectedItem!)
|
||||||
|
.Include(e => e.Sources)
|
||||||
|
.ThenInclude(s => s.Source)
|
||||||
|
.Include(e => e.Aliases)
|
||||||
|
.Include(e => e.Keywords)
|
||||||
|
.Include(e => e.Externals)
|
||||||
|
.ThenInclude(x => x.Target)
|
||||||
|
.Include(e => e.Traits)
|
||||||
|
.ThenInclude(t => t.Entity)
|
||||||
|
.FirstOrDefault()
|
||||||
|
;
|
||||||
|
|
||||||
|
if (entity == null)
|
||||||
|
{
|
||||||
|
DescriptionTextBox.Text = "Not found";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string json = SerializeEntity(entity);
|
||||||
|
|
||||||
JsonToTreeview(EntityTreeView, json, "Entity");
|
JsonToTreeview(EntityTreeView, json, "Entity");
|
||||||
|
|
||||||
DescriptionTextBox.Text = data.GetEntity().Description.Replace("\\r", "").Replace("\\n", "\\r\\n");
|
DescriptionTextBox.Text = entity.Description.Replace("\\r", "").Replace("\\n", "\\r\\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public string SerializeEntity(Entity entity)
|
public string SerializeEntity(Entity entity)
|
||||||
{
|
{
|
||||||
JsonSerializerSettings settings = new()
|
JsonSerializerSettings settings = new()
|
||||||
@@ -161,21 +181,40 @@ public partial class MainViewForm : Form
|
|||||||
string result = JsonConvert.SerializeObject(entity, settings);
|
string result = JsonConvert.SerializeObject(entity, settings);
|
||||||
|
|
||||||
Type type = EntityOfTypeAttribute.Resolve(entity);
|
Type type = EntityOfTypeAttribute.Resolve(entity);
|
||||||
string subResult = JsonConvert.SerializeObject(ResolveEntity(entity), settings);
|
string subResult = JsonConvert.SerializeObject(ResolveSubEntity(entity), settings);
|
||||||
|
|
||||||
return result[..^1] + $",\"SubEntity\":{subResult}}}";
|
return result[..^1] + $",\"SubEntity\":{subResult}}}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEntity? ResolveEntity(Entity entity)
|
public IEntity? ResolveSubEntity(Entity entity)
|
||||||
{
|
{
|
||||||
switch (entity.Type)
|
switch (entity.Type)
|
||||||
{
|
{
|
||||||
case EntityType.Ancestry:
|
case EntityType.Ancestry:
|
||||||
return Context.Ancestries
|
return Context.Ancestries
|
||||||
|
.Include(a => a.AncestryBoosts)
|
||||||
.FirstOrDefault(e => e.Id == entity.Id);
|
.FirstOrDefault(e => e.Id == entity.Id);
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
case EntityType.Background:
|
||||||
|
return Context.Backgrounds
|
||||||
|
.Include(b => b.BackgroundBoosts)
|
||||||
|
.Include(b => b.BackgroundSkills)
|
||||||
|
.ThenInclude(t => t.Training)
|
||||||
|
.Include(b => b.BackgroundItems)
|
||||||
|
.FirstOrDefault(e => e.Id == entity.Id);
|
||||||
|
|
||||||
|
case EntityType.Class:
|
||||||
|
return Context.Classes
|
||||||
|
.Include(c => c.ClassKeyAbilities)
|
||||||
|
.Include(c => c.ClassTrainings)
|
||||||
|
.ThenInclude(t => t.Training)
|
||||||
|
.Include(c => c.ClassProgressions)
|
||||||
|
.FirstOrDefault(c => c.Id == entity.Id);
|
||||||
|
|
||||||
|
default:
|
||||||
|
Type type = EntityOfTypeAttribute.Resolve(entity);
|
||||||
|
return (IEntity?) Context.Find(type, entity.Id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void JsonToTreeview(TreeView treeView, string jsonString, string rootName)
|
public static void JsonToTreeview(TreeView treeView, string jsonString, string rootName)
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ schema.AddValue(data); // Добавление данных
|
|||||||
|
|
||||||
## Aonprd (Архивы Нефиса)
|
## Aonprd (Архивы Нефиса)
|
||||||
|
|
||||||
Готово: **4** из 70
|
Готово: **5** из 70
|
||||||
|
|
||||||
### Общее
|
### Общее
|
||||||
- [x] action.yaml
|
- [x] action.yaml
|
||||||
@@ -97,7 +97,7 @@ schema.AddValue(data); // Добавление данных
|
|||||||
- [ ] eidolon.yaml
|
- [ ] eidolon.yaml
|
||||||
- [ ] element.yaml
|
- [ ] element.yaml
|
||||||
- [ ] epithet.yaml
|
- [ ] epithet.yaml
|
||||||
- [ ] feat.yaml
|
- [x] feat.yaml
|
||||||
- [ ] hazard.yaml
|
- [ ] hazard.yaml
|
||||||
- [ ] hellknight-order.yaml
|
- [ ] hellknight-order.yaml
|
||||||
- [ ] heritage.yaml
|
- [ ] heritage.yaml
|
||||||
@@ -125,8 +125,8 @@ schema.AddValue(data); // Добавление данных
|
|||||||
- [ ] rules.yaml
|
- [ ] rules.yaml
|
||||||
- [ ] sidebar.yaml
|
- [ ] sidebar.yaml
|
||||||
- [ ] skill-general-action.yaml
|
- [ ] skill-general-action.yaml
|
||||||
- [ ] skill.yaml
|
- [x] skill.yaml
|
||||||
- [ ] source.yaml
|
- [x] source.yaml
|
||||||
- [ ] spell.yaml
|
- [ ] spell.yaml
|
||||||
- [ ] style.yaml
|
- [ ] style.yaml
|
||||||
- [ ] subconscious-mind.yaml
|
- [ ] subconscious-mind.yaml
|
||||||
|
|||||||
Reference in New Issue
Block a user