Ещё пачка изменений

This commit is contained in:
2025-04-15 00:02:03 +04:00
parent 80b5770036
commit 9668807b46
26 changed files with 329 additions and 59 deletions
@@ -29,15 +29,16 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder
public void PrepareProcessors() public void PrepareProcessors()
{ {
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes()) foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
{ {
if (type.GetCustomAttributes(typeof(Pf2eTypeProcessor), true).Length > 0) if (type.GetCustomAttributes(typeof(Pf2eTypeProcessor), true).Length <= 0)
{ {
continue;
}
var attribute = type.GetCustomAttribute<Pf2eTypeProcessor>(); var attribute = type.GetCustomAttribute<Pf2eTypeProcessor>();
Processors.Add(attribute!.Type, type.GetConstructor(new[] { typeof(JObject) })!); Processors.Add(attribute!.Type, type.GetConstructor(new[] { typeof(JObject) })!);
} }
} }
}
public AbstractProcessor? GetProcessor(string type, JObject input) public AbstractProcessor? GetProcessor(string type, JObject input)
{ {
@@ -53,7 +54,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder
{ {
Console.WriteLine("Truncating all old data..."); Console.WriteLine("Truncating all old data...");
Database.ExecuteCommand($"SELECT f_truncate_tables();"); Database.ExecuteCommand("SELECT f_truncate_tables();");
Console.WriteLine("Truncation completed!"); Console.WriteLine("Truncation completed!");
} }
@@ -1,5 +1,6 @@
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Pf2eDataScrapper.Model; using Pf2eDataScrapper.Model;
using Pf2eDataScrapper.Model.Enum;
using Slugify; using Slugify;
using static LinqToDB.Common.Configuration; using static LinqToDB.Common.Configuration;
@@ -24,7 +25,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder.Pro
Img = GetRequired<string>("img"), Img = GetRequired<string>("img"),
Description = GetRequired<string>("system.description.value"), Description = GetRequired<string>("system.description.value"),
DescriptionGm = GetOptional<string>("system.description.gm"), DescriptionGm = GetOptional<string>("system.description.gm"),
// Type = Type = EntityType.Condition,
IsTranslated = false, IsTranslated = false,
IsChecked = false, IsChecked = false,
+3
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Pf2eDataScrapper.Model.Enum;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class Action
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Action;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+3
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Pf2eDataScrapper.Model.Enum;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class Ancestry
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Ancestry;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+4 -1
View File
@@ -1,4 +1,5 @@
using System; using Pf2eDataScrapper.Model.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class Background
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Background;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+4 -1
View File
@@ -1,4 +1,5 @@
using System; using Pf2eDataScrapper.Model.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class CampaignFeature
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.CampaignFeature;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+4 -1
View File
@@ -1,4 +1,5 @@
using System; using Pf2eDataScrapper.Model.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class Class
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Class;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+7 -2
View File
@@ -1,16 +1,19 @@
using System; using Pf2eDataScrapper.Model.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
public partial class Condition public partial class Condition
{ {
public int Id { get; set; } public int Id { get; set; } = -1;
public string Name { get; set; } = null!; public string Name { get; set; } = null!;
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Condition;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
@@ -21,5 +24,7 @@ public partial class Condition
public bool? IsChecked { get; set; } public bool? IsChecked { get; set; }
public ConditionGroup Group { get; set; }
public string? Extra { get; set; } public string? Extra { get; set; }
} }
+4 -1
View File
@@ -1,4 +1,5 @@
using System; using Pf2eDataScrapper.Model.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class Deity
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Deity;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Pf2eDataScrapper.Model;
public partial class Entity public partial class Entity
{ {
public int Id { get; set; } public int Id { get; set; } = -1;
public string Name { get; set; } = null!; public string Name { get; set; } = null!;
@@ -0,0 +1,22 @@
using NpgsqlTypes;
namespace Pf2eDataScrapper.Model.Enum;
public enum ConditionGroup
{
[PgName("senses")]
Senses,
[PgName("abilities")]
Abilities,
[PgName("death")]
Death,
[PgName("attitudes")]
Attitudes,
[PgName("detection")]
Detection
}
+42
View File
@@ -0,0 +1,42 @@
using NpgsqlTypes;
namespace Pf2eDataScrapper.Model.Enum;
public enum EntityType
{
[PgName("unknown")]
Unknown,
[PgName("action")]
Action,
[PgName("ancestry")]
Ancestry,
[PgName("background")]
Background,
[PgName("backpack")]
Backpack,
[PgName("campaign_feature")]
CampaignFeature,
[PgName("class")]
Class,
[PgName("condition")]
Condition,
[PgName("deity")]
Deity,
[PgName("feat")]
Feat,
[PgName("heritage")]
Heritage,
[PgName("spell")]
Spell
}
+1 -1
View File
@@ -2,7 +2,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class ExternalTarget public partial class ExternalTarget
{ {
+5 -2
View File
@@ -1,7 +1,8 @@
using System; using Pf2eDataScrapper.Model.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class Feat public partial class Feat
{ {
@@ -11,6 +12,8 @@ public partial class Feat
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Feat;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+1 -1
View File
@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class FeatPrerequisite public partial class FeatPrerequisite
{ {
+1 -1
View File
@@ -2,7 +2,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class Frequency public partial class Frequency
{ {
+4 -1
View File
@@ -1,8 +1,9 @@
using Pf2eDataScrapper.Model; using Pf2eDataScrapper.Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Pf2eDataScrapper.Model.Enum;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class Heritage public partial class Heritage
{ {
@@ -12,6 +13,8 @@ public partial class Heritage
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Heritage;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+1 -1
View File
@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class Keyword public partial class Keyword
{ {
+1 -1
View File
@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class KeywordAlias public partial class KeywordAlias
{ {
+1 -1
View File
@@ -2,7 +2,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper.Model;
public partial class Language public partial class Language
{ {
+3
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Pf2eDataScrapper.Model.Enum;
namespace Pf2eDataScrapper.Model; namespace Pf2eDataScrapper.Model;
@@ -11,6 +12,8 @@ public partial class Spell
public string Img { get; set; } = null!; public string Img { get; set; } = null!;
public EntityType Type { get; set; } = EntityType.Spell;
public string Description { get; set; } = null!; public string Description { get; set; } = null!;
public string? DescriptionGm { get; set; } public string? DescriptionGm { get; set; }
+2
View File
@@ -62,6 +62,8 @@ namespace Pf2eDataScrapper
} }
/* /*
public void RebuildDatabase() public void RebuildDatabase()
{ {
+106 -4
View File
@@ -1,7 +1,12 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using LinqToDB.SqlQuery;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Pf2eDataScrapper.Model; using Pf2eDataScrapper.Model;
using Pf2eDataScrapper.Model.Enum;
namespace Pf2eDataScrapper; namespace Pf2eDataScrapper;
@@ -98,10 +103,74 @@ public partial class Pf2eTestContext : DbContext
public virtual DbSet<Trait> Traits { get; set; } public virtual DbSet<Trait> Traits { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseNpgsql(EnvSettings.DatabaseConnection); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
optionsBuilder.UseNpgsql(EnvSettings.DatabaseConnection,
builder =>
{
builder
.MapEnum<EntityType>("entity_type")
.MapEnum<ConditionGroup>("condition_group");
}
);
}
protected string FromEnum<T>(T enumValue) where T : Enum
{
var enumFieldName = enumValue.ToString();
var field = typeof(T).GetField(enumFieldName);
if (field is null)
{
return enumFieldName;
}
var attribute = field.GetCustomAttribute<DescriptionAttribute>();
return attribute is null ? enumFieldName : attribute.Description;
}
protected T ToEnum<T>(string enumValue) where T : Enum
{
var enumType = typeof(T);
foreach (var field in enumType.GetFields())
{
var attribute = field.GetCustomAttribute<DescriptionAttribute>();
if (attribute is null)
{
if (field.Name == enumValue)
{
return (T)field.GetValue(null)!;
}
}
else
{
if (attribute.Description == enumValue)
{
return (T)field.GetValue(null)!;
}
}
}
throw new ArgumentException($"No matching value found for {enumValue} in {enumType.Name}");
}
protected ValueConverter<T, string> GetEnumConverter<T>() where T : Enum
{
return new ValueConverter<T, string>(
v => FromEnum(v),
v => ToEnum<T>(v));
}
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
modelBuilder.UseIdentityByDefaultColumns();
modelBuilder.HasSequence<int>("entity_sequence");
modelBuilder
.HasPostgresEnum<EntityType>("entity_type")
.HasPostgresEnum<ConditionGroup>("condition_group")
;
modelBuilder modelBuilder
.HasPostgresEnum("action_category", new[] { "offensive", "defensive", "interaction", "familiar" }) .HasPostgresEnum("action_category", new[] { "offensive", "defensive", "interaction", "familiar" })
.HasPostgresEnum("action_type", new[] { "action", "free", "reaction", "passive" }) .HasPostgresEnum("action_type", new[] { "action", "free", "reaction", "passive" })
@@ -109,12 +178,12 @@ public partial class Pf2eTestContext : DbContext
.HasPostgresEnum("ancestry_vision", new[] { "normal", "low_light_vision", "darkvision" }) .HasPostgresEnum("ancestry_vision", new[] { "normal", "low_light_vision", "darkvision" })
.HasPostgresEnum("campaign_feature_category", new[] { "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" }) .HasPostgresEnum("campaign_feature_category", new[] { "army_tactic", "army_war_action", "kingdom_activity", "kingdom_feat", "kingdom_feature" })
.HasPostgresEnum("class_progression_type", new[] { "entity", "ancestry_feat", "class_feat", "general_feat", "skill_feat", "skill_increase" }) .HasPostgresEnum("class_progression_type", new[] { "entity", "ancestry_feat", "class_feat", "general_feat", "skill_feat", "skill_increase" })
.HasPostgresEnum("condition_group", new[] { "senses", "abilities", "death", "attitudes", "detection" }) // .HasPostgresEnum("condition_group", new[] { "senses", "abilities", "death", "attitudes", "detection" })
.HasPostgresEnum("deity_category", new[] { "deity", "pantheon", "covenant", "philosophy" }) .HasPostgresEnum("deity_category", new[] { "deity", "pantheon", "covenant", "philosophy" })
.HasPostgresEnum("deity_fonts", new[] { "none", "heal", "harm", "any" }) .HasPostgresEnum("deity_fonts", new[] { "none", "heal", "harm", "any" })
.HasPostgresEnum("deity_sanctification", new[] { "holy", "unholy", "any" }) .HasPostgresEnum("deity_sanctification", new[] { "holy", "unholy", "any" })
.HasPostgresEnum("entity_rarity", new[] { "common", "uncommon", "rare", "unique" }) .HasPostgresEnum("entity_rarity", new[] { "common", "uncommon", "rare", "unique" })
.HasPostgresEnum("entity_type", new[] { "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell" }) // .HasPostgresEnum("entity_type", new[] { "action", "ancestry", "background", "backpack", "campaign_feature", "class", "condition", "deity", "feat", "heritage", "spell" })
.HasPostgresEnum("enum_size", new[] { "med", "lanuages", "system", "tiny" }) .HasPostgresEnum("enum_size", new[] { "med", "lanuages", "system", "tiny" })
.HasPostgresEnum("feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon" }) .HasPostgresEnum("feat_category", new[] { "ancestryfeature", "classfeature", "calling", "class", "skill", "general", "ancestry", "bonus", "deityboon", "curse", "pfsboon" })
.HasPostgresEnum("spell_area_type", new[] { "burst", "emanation", "cone", "line", "square", "cube", "cylinder" }) .HasPostgresEnum("spell_area_type", new[] { "burst", "emanation", "cone", "line", "square", "cube", "cylinder" })
@@ -131,6 +200,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.Actions).HasColumnName("actions"); entity.Property(e => e.Actions).HasColumnName("actions");
entity.Property(e => e.DeathNote).HasColumnName("death_note"); entity.Property(e => e.DeathNote).HasColumnName("death_note");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
@@ -162,6 +234,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
entity.Property(e => e.Hp).HasColumnName("hp"); entity.Property(e => e.Hp).HasColumnName("hp");
@@ -256,6 +331,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
entity.Property(e => e.Img) entity.Property(e => e.Img)
@@ -376,6 +454,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.AdditionalTrainedSkills).HasColumnName("additionalTrainedSkills"); entity.Property(e => e.AdditionalTrainedSkills).HasColumnName("additionalTrainedSkills");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
@@ -469,8 +550,13 @@ public partial class Pf2eTestContext : DbContext
entity.ToTable("condition"); entity.ToTable("condition");
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() //.ValueGeneratedNever()
.HasDefaultValueSql("nextval('entity_sequence')")
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
//.HasConversion(GetEnumConverter<EntityType>())
//.HasConversion<string>()
.HasColumnName("type");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
entity.Property(e => e.Extra).HasColumnName("extra"); entity.Property(e => e.Extra).HasColumnName("extra");
@@ -489,6 +575,10 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Slug) entity.Property(e => e.Slug)
.HasMaxLength(150) .HasMaxLength(150)
.HasColumnName("slug"); .HasColumnName("slug");
entity.Property(e => e.Group)
//.HasConversion(GetEnumConverter<ConditionGroup>())
//.HasConversion<string>()
.HasColumnName("group");
}); });
modelBuilder.Entity<Deity>(entity => modelBuilder.Entity<Deity>(entity =>
@@ -500,6 +590,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
entity.Property(e => e.Img) entity.Property(e => e.Img)
@@ -777,6 +870,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.Actions).HasColumnName("actions"); entity.Property(e => e.Actions).HasColumnName("actions");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
@@ -851,6 +947,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.AncestryId).HasColumnName("ancestry_id"); entity.Property(e => e.AncestryId).HasColumnName("ancestry_id");
entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.DescriptionGm).HasColumnName("description_gm"); entity.Property(e => e.DescriptionGm).HasColumnName("description_gm");
@@ -940,6 +1039,9 @@ public partial class Pf2eTestContext : DbContext
entity.Property(e => e.Id) entity.Property(e => e.Id)
.ValueGeneratedNever() .ValueGeneratedNever()
.HasColumnName("id"); .HasColumnName("id");
entity.Property(e => e.Type)
.HasConversion(GetEnumConverter<EntityType>())
.HasColumnName("type");
entity.Property(e => e.CanHeightening).HasColumnName("can_heightening"); entity.Property(e => e.CanHeightening).HasColumnName("can_heightening");
entity.Property(e => e.Cost).HasColumnName("cost"); entity.Property(e => e.Cost).HasColumnName("cost");
entity.Property(e => e.Counteraction).HasColumnName("counteraction"); entity.Property(e => e.Counteraction).HasColumnName("counteraction");
+3 -1
View File
@@ -8,9 +8,10 @@ var importer = new Pf2EFoundryImporter();
importer.Prepare(); importer.Prepare();
importer.Import();
/*
try try
{ {
importer.Import();
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -22,3 +23,4 @@ catch (Exception ex)
// importer.BuildSchemas(); // importer.BuildSchemas();
*/
+2 -2
View File
@@ -204,7 +204,7 @@ namespace Pf2eDataScrapper.SchemaBuilder
/// </summary> /// </summary>
/// <param name="input">Словарь данных.</param> /// <param name="input">Словарь данных.</param>
/// <returns>Строка форматированных данных</returns> /// <returns>Строка форматированных данных</returns>
public static string FormatYaml(params List<Dictionary<string, string>> input) public static string FormatYaml(params Dictionary<string, string>[] input)
{ {
var result = ""; var result = "";
@@ -218,7 +218,7 @@ namespace Pf2eDataScrapper.SchemaBuilder
return result.Trim(); return result.Trim();
} }
public static Dictionary<string, string> MergeDictionaries(params List<Dictionary<string, string>> input) public static Dictionary<string, string> MergeDictionaries(params Dictionary<string, string>[] input)
{ {
var result = new Dictionary<string, string>(); var result = new Dictionary<string, string>();
+96 -30
View File
@@ -1,4 +1,6 @@
-- Common Enums -- Common Enums
DROP TYPE IF EXISTS "enum_size";
CREATE TYPE "enum_size" AS ENUM ( CREATE TYPE "enum_size" AS ENUM (
'med', 'med',
'lanuages', 'lanuages',
@@ -9,6 +11,9 @@ CREATE TYPE "enum_size" AS ENUM (
-- Entity -- Entity
CREATE SEQUENCE "entity_sequence";
DROP TYPE IF EXISTS "entity_type";
CREATE TYPE "entity_type" AS ENUM ( CREATE TYPE "entity_type" AS ENUM (
'action', 'action',
'ancestry', 'ancestry',
@@ -23,6 +28,7 @@ CREATE TYPE "entity_type" AS ENUM (
'spell' 'spell'
); );
DROP TYPE IF EXISTS "entity_rarity";
CREATE TYPE "entity_rarity" AS ENUM ( CREATE TYPE "entity_rarity" AS ENUM (
'common', 'common',
'uncommon', 'uncommon',
@@ -31,7 +37,7 @@ CREATE TYPE "entity_rarity" AS ENUM (
); );
CREATE TABLE "entity" ( CREATE TABLE "entity" (
"id" int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"name" varchar(150) NOT NULL, "name" varchar(150) NOT NULL,
"img" varchar(150) NOT NULL, "img" varchar(150) NOT NULL,
"description" text NOT NULL, "description" text NOT NULL,
@@ -47,6 +53,7 @@ CREATE TABLE "entity" (
-- Alias -- Alias
DROP TYPE IF EXISTS "alias_type";
CREATE TYPE "alias_type" AS ENUM ( CREATE TYPE "alias_type" AS ENUM (
'old', 'old',
'english', 'english',
@@ -126,6 +133,7 @@ ALTER TABLE "entity_external" ADD FOREIGN KEY ("target_id") REFERENCES "external
-- Trait -- Trait
DROP TYPE IF EXISTS "trait_type";
CREATE TYPE "trait_type" AS ENUM ( CREATE TYPE "trait_type" AS ENUM (
'regular', 'regular',
'tradition' 'tradition'
@@ -179,6 +187,7 @@ CREATE TABLE "trainings" (
-- Spell -- Spell
DROP TYPE IF EXISTS "spell_area_type";
CREATE TYPE "spell_area_type" AS ENUM ( CREATE TYPE "spell_area_type" AS ENUM (
'burst', 'burst',
'emanation', 'emanation',
@@ -188,10 +197,12 @@ CREATE TYPE "spell_area_type" AS ENUM (
'cube', 'cube',
'cylinder' 'cylinder'
); );
DROP TYPE IF EXISTS "spell_damage_category";
CREATE TYPE "spell_damage_category" AS ENUM ( CREATE TYPE "spell_damage_category" AS ENUM (
'persistent', 'persistent',
'splash' 'splash'
); );
DROP TYPE IF EXISTS "spell_damage_kinds";
CREATE TYPE "spell_damage_kinds" AS ENUM ( CREATE TYPE "spell_damage_kinds" AS ENUM (
'damage', 'damage',
'healing', 'healing',
@@ -199,7 +210,7 @@ CREATE TYPE "spell_damage_kinds" AS ENUM (
); );
CREATE TABLE "spell" ( CREATE TABLE "spell" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"level" int NOT NULL, "level" int NOT NULL,
"cost" int NOT NULL, "cost" int NOT NULL,
"counteraction" bool NOT NULL, "counteraction" bool NOT NULL,
@@ -209,8 +220,7 @@ CREATE TABLE "spell" (
"requirements" varchar NOT NULL, "requirements" varchar NOT NULL,
"target" varchar NOT NULL, "target" varchar NOT NULL,
"time" varchar NOT NULL, "time" varchar NOT NULL,
"can_heightening" bool NOT NULL, "can_heightening" bool NOT NULL
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "spell" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "spell" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -255,18 +265,21 @@ ALTER TABLE "spell_defense" ADD FOREIGN KEY ("spell_id") REFERENCES "spell" ("id
-- Action -- Action
DROP TYPE IF EXISTS "action_type";
CREATE TYPE "action_type" AS ENUM ( CREATE TYPE "action_type" AS ENUM (
'action', 'action',
'free', 'free',
'reaction', 'reaction',
'passive' 'passive'
); );
DROP TYPE IF EXISTS "action_category";
CREATE TYPE "action_category" AS ENUM ( CREATE TYPE "action_category" AS ENUM (
'offensive', 'offensive',
'defensive', 'defensive',
'interaction', 'interaction',
'familiar' 'familiar'
); );
DROP TYPE IF EXISTS "ancestry_vision";
CREATE TYPE "ancestry_vision" AS ENUM ( CREATE TYPE "ancestry_vision" AS ENUM (
'normal', 'normal',
'low_light_vision', 'low_light_vision',
@@ -274,13 +287,12 @@ CREATE TYPE "ancestry_vision" AS ENUM (
); );
CREATE TABLE "action" ( CREATE TABLE "action" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"action_type" action_type NOT NULL, "action_type" action_type NOT NULL,
"actions" int, "actions" int,
"category" action_category, "category" action_category,
"death_note" bool, "death_note" bool,
"extra" text, "extra" text
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "action" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "action" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -288,13 +300,12 @@ CREATE TABLE "action" (
-- Ancestry -- Ancestry
CREATE TABLE "ancestry" ( CREATE TABLE "ancestry" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"hp" int NOT NULL, "hp" int NOT NULL,
"reach" int NOT NULL, "reach" int NOT NULL,
"size" enum_size NOT NULL, "size" enum_size NOT NULL,
"speed" int NOT NULL, "speed" int NOT NULL,
"vision" ancestry_vision NOT NULL, "vision" ancestry_vision NOT NULL
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "ancestry" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "ancestry" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -328,8 +339,7 @@ ALTER TABLE "ancestry_items" ADD FOREIGN KEY ("item_id") REFERENCES "entity" ("i
-- Background -- Background
CREATE TABLE "background" ( CREATE TABLE "background" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "background" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "background" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -360,6 +370,7 @@ ALTER TABLE "background_boosts" ADD FOREIGN KEY ("background_id") REFERENCES "ba
-- Campaign Feature -- Campaign Feature
DROP TYPE IF EXISTS "campaign_feature_category";
CREATE TYPE "campaign_feature_category" AS ENUM ( CREATE TYPE "campaign_feature_category" AS ENUM (
'army_tactic', 'army_tactic',
'army_war_action', 'army_war_action',
@@ -369,20 +380,20 @@ CREATE TYPE "campaign_feature_category" AS ENUM (
); );
CREATE TABLE "campaign_feature" ( CREATE TABLE "campaign_feature" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"level" int, "level" int,
"action_type" action_type NOT NULL, "action_type" action_type NOT NULL,
"actions" int NOT NULL, "actions" int NOT NULL,
"category" campaign_feature_category NOT NULL, "category" campaign_feature_category NOT NULL,
"prerequisites" varchar, "prerequisites" varchar,
"extra" text, "extra" text
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "campaign_feature" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "campaign_feature" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
-- Class -- Class
DROP TYPE IF EXISTS "class_progression_type";
CREATE TYPE "class_progression_type" AS ENUM ( CREATE TYPE "class_progression_type" AS ENUM (
'entity', 'entity',
'ancestry_feat', 'ancestry_feat',
@@ -393,12 +404,11 @@ CREATE TYPE "class_progression_type" AS ENUM (
); );
CREATE TABLE "class" ( CREATE TABLE "class" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"hp" int NOT NULL, "hp" int NOT NULL,
"perception" int NOT NULL, "perception" int NOT NULL,
"spellcasting" bool NOT NULL, "spellcasting" bool NOT NULL,
"additionalTrainedSkills" int NOT NULL, "additionalTrainedSkills" int NOT NULL
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "class" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "class" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -432,6 +442,7 @@ ALTER TABLE "class_trainings" ADD FOREIGN KEY ("item") REFERENCES "trainings" ("
-- Condition -- Condition
DROP TYPE IF EXISTS "condition_group";
CREATE TYPE "condition_group" AS ENUM ( CREATE TYPE "condition_group" AS ENUM (
'senses', 'senses',
'abilities', 'abilities',
@@ -441,28 +452,30 @@ CREATE TYPE "condition_group" AS ENUM (
); );
CREATE TABLE "condition" ( CREATE TABLE "condition" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"group" condition_group, "group" condition_group,
"extra" text, "extra" text
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "condition" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "condition" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
-- Deity -- Deity
DROP TYPE IF EXISTS "deity_category";
CREATE TYPE "deity_category" AS ENUM ( CREATE TYPE "deity_category" AS ENUM (
'deity', 'deity',
'pantheon', 'pantheon',
'covenant', 'covenant',
'philosophy' 'philosophy'
); );
DROP TYPE IF EXISTS "deity_fonts";
CREATE TYPE "deity_fonts" AS ENUM ( CREATE TYPE "deity_fonts" AS ENUM (
'none', 'none',
'heal', 'heal',
'harm', 'harm',
'any' 'any'
); );
DROP TYPE IF EXISTS "deity_sanctification";
CREATE TYPE "deity_sanctification" AS ENUM ( CREATE TYPE "deity_sanctification" AS ENUM (
'holy', 'holy',
'unholy', 'unholy',
@@ -470,12 +483,11 @@ CREATE TYPE "deity_sanctification" AS ENUM (
); );
CREATE TABLE "deity" ( CREATE TABLE "deity" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"category" deity_category NOT NULL, "category" deity_category NOT NULL,
"font" deity_fonts NOT NULL, "font" deity_fonts NOT NULL,
"sanctification_must" bool NOT NULL, "sanctification_must" bool NOT NULL,
"sanctification_type" deity_sanctification NOT NULL, "sanctification_type" deity_sanctification NOT NULL
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "deity" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "deity" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -521,6 +533,7 @@ ALTER TABLE "deity_domains" ADD FOREIGN KEY ("deity_id") REFERENCES "deity" ("id
-- Feat -- Feat
DROP TYPE IF EXISTS "feat_category";
CREATE TYPE "feat_category" AS ENUM ( CREATE TYPE "feat_category" AS ENUM (
'ancestryfeature', 'ancestryfeature',
'classfeature', 'classfeature',
@@ -536,7 +549,7 @@ CREATE TYPE "feat_category" AS ENUM (
); );
CREATE TABLE "feat" ( CREATE TABLE "feat" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"action_type" action_type NOT NULL, "action_type" action_type NOT NULL,
"actions" int, "actions" int,
"category" feat_category NOT NULL, "category" feat_category NOT NULL,
@@ -545,8 +558,7 @@ CREATE TABLE "feat" (
"max_takable" int, "max_takable" int,
"location" varchar(12), "location" varchar(12),
"only_level_1" bool, "only_level_1" bool,
"extra" text, "extra" text
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "feat" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "feat" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
@@ -561,9 +573,63 @@ ALTER TABLE "feat_prerequisites" ADD FOREIGN KEY ("feat_id") REFERENCES "feat" (
-- Heritage -- Heritage
CREATE TABLE "heritage" ( CREATE TABLE "heritage" (
-- "id" int PRIMARY KEY, "id" int DEFAULT nextval('entity_sequence') PRIMARY KEY,
"ancestry_id" int, "ancestry_id" int
PRIMARY KEY ("id")
) INHERITS ("entity"); ) INHERITS ("entity");
-- ALTER TABLE "heritage" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id"); -- ALTER TABLE "heritage" ADD FOREIGN KEY ("id") REFERENCES "entity" ("id");
ALTER TABLE "heritage" ADD FOREIGN KEY ("ancestry_id") REFERENCES "ancestry" ("id"); ALTER TABLE "heritage" ADD FOREIGN KEY ("ancestry_id") REFERENCES "ancestry" ("id");
----------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION f_truncate_tables()
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
EXECUTE
(SELECT 'TRUNCATE TABLE '
|| string_agg(format('%I.%I', schemaname, tablename), ', ')
|| ' CASCADE;'
FROM pg_tables
WHERE schemaname = 'public'
);
END
$func$;
----------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION f_drop_tables()
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
EXECUTE
(SELECT 'DROP TABLE '
|| string_agg(format('%I.%I', schemaname, tablename), ', ')
|| ' CASCADE;'
FROM pg_tables
WHERE schemaname = 'public'
);
END
$func$;
----------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION f_drop_tables(_username text)
RETURNS void
LANGUAGE plpgsql AS
$func$
DECLARE
_tbl text;
_sch text;
BEGIN
FOR _sch, _tbl IN
SELECT schemaname, tablename
FROM pg_tables
WHERE schemaname = 'public'
LOOP
EXECUTE format('ALTER TABLE %I.%I OWNER TO %I', _sch, _tbl, _username);
END LOOP;
END
$func$;