More features
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
using System.Globalization;
|
||||
using CsvHelper;
|
||||
using CsvHelper.Configuration;
|
||||
using DCGEngine.Database.Interfaces;
|
||||
using SVSim.Database.Common;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SVSim.Database.Models;
|
||||
|
||||
@@ -12,6 +12,17 @@ namespace SVSim.Database.DataSeeders;
|
||||
/// </summary>
|
||||
public class BaseDataSeeder : IDataSeeder
|
||||
{
|
||||
private static string DataPath(string fileName) =>
|
||||
Path.Combine(AppContext.BaseDirectory, "Data", fileName);
|
||||
|
||||
private static List<T> ReadCsv<T, TMap>(string fileName) where TMap : ClassMap<T>, new()
|
||||
{
|
||||
using StreamReader reader = new(DataPath(fileName));
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<TMap>();
|
||||
return csv.GetRecords<T>().ToList();
|
||||
}
|
||||
|
||||
private class ClassEntryMap : ClassMap<ClassEntry>
|
||||
{
|
||||
public ClassEntryMap()
|
||||
@@ -108,99 +119,33 @@ public class BaseDataSeeder : IDataSeeder
|
||||
|
||||
public void Seed(ModelBuilder builder)
|
||||
{
|
||||
List<ClassEntry> classes = new();
|
||||
List<LeaderSkinEntry> leaderSkins = new();
|
||||
List<EmblemEntry> emblems = new();
|
||||
List<DegreeEntry> degrees = new();
|
||||
List<SleeveEntry> sleeves = new();
|
||||
List<BattlefieldEntry> battlefields = new();
|
||||
List<MyPageBackgroundEntry> myPageBackgrounds = new();
|
||||
List<ClassExpEntry> classexp = new();
|
||||
List<RankInfoEntry> rankinfos = new();
|
||||
|
||||
using (StreamReader reader = new("data/classes.csv"))
|
||||
// Migrations bake the HasData rows into InsertData calls — once the migration is
|
||||
// generated, runtime model-creation no longer needs the CSVs. Tools that only query
|
||||
// an already-migrated DB (e.g. SVSim.CardImport) don't ship the Data folder; skip
|
||||
// gracefully so DbContext construction succeeds for them.
|
||||
if (!File.Exists(DataPath("classes.csv")))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<ClassEntryMap>();
|
||||
|
||||
IEnumerable<ClassEntry> records = csv.GetRecords<ClassEntry>();
|
||||
classes.AddRange(records);
|
||||
}
|
||||
|
||||
using (StreamReader reader = new("data/leaderskins.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<LeaderSkinEntryMap>();
|
||||
|
||||
IEnumerable<LeaderSkinEntry> records = csv.GetRecords<LeaderSkinEntry>();
|
||||
leaderSkins.AddRange(records);
|
||||
|
||||
leaderSkins.ForEach(skin =>
|
||||
{
|
||||
if (skin.ClassId == 0)
|
||||
{
|
||||
skin.ClassId = null;
|
||||
}
|
||||
});
|
||||
Console.Error.WriteLine($"[BaseDataSeeder] Skipping seed: Data folder not found at {DataPath("")}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Load rest of default data
|
||||
using (StreamReader reader = new("data/emblems.csv"))
|
||||
List<ClassEntry> classes = ReadCsv<ClassEntry, ClassEntryMap>("classes.csv");
|
||||
List<LeaderSkinEntry> leaderSkins = ReadCsv<LeaderSkinEntry, LeaderSkinEntryMap>("leaderskins.csv");
|
||||
leaderSkins.ForEach(skin =>
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<EmblemEntryMap>();
|
||||
|
||||
IEnumerable<EmblemEntry> records = csv.GetRecords<EmblemEntry>();
|
||||
emblems.AddRange(records);
|
||||
}
|
||||
using (StreamReader reader = new("data/degrees.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<DegreeEntryMap>();
|
||||
|
||||
IEnumerable<DegreeEntry> records = csv.GetRecords<DegreeEntry>();
|
||||
degrees.AddRange(records);
|
||||
}
|
||||
using (StreamReader reader = new("data/sleeves.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<SleeveEntryMap>();
|
||||
|
||||
IEnumerable<SleeveEntry> records = csv.GetRecords<SleeveEntry>();
|
||||
sleeves.AddRange(records);
|
||||
}
|
||||
using (StreamReader reader = new("data/battlefields.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<BattlefieldEntryMap>();
|
||||
|
||||
IEnumerable<BattlefieldEntry> records = csv.GetRecords<BattlefieldEntry>();
|
||||
battlefields.AddRange(records);
|
||||
}
|
||||
using (StreamReader reader = new("data/mypagebackgrounds.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<MyPageBackgroundEntryMap>();
|
||||
|
||||
IEnumerable<MyPageBackgroundEntry> records = csv.GetRecords<MyPageBackgroundEntry>();
|
||||
myPageBackgrounds.AddRange(records);
|
||||
}
|
||||
using (StreamReader reader = new("data/ranks.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<RankInfoEntryMap>();
|
||||
|
||||
IEnumerable<RankInfoEntry> records = csv.GetRecords<RankInfoEntry>();
|
||||
rankinfos.AddRange(records);
|
||||
}
|
||||
using (StreamReader reader = new("data/classexp.csv"))
|
||||
{
|
||||
using CsvReader csv = new(reader, CultureInfo.InvariantCulture);
|
||||
csv.Context.RegisterClassMap<ClassExpEntryMap>();
|
||||
|
||||
IEnumerable<ClassExpEntry> records = csv.GetRecords<ClassExpEntry>();
|
||||
classexp.AddRange(records);
|
||||
}
|
||||
if (skin.ClassId == 0)
|
||||
{
|
||||
skin.ClassId = null;
|
||||
}
|
||||
});
|
||||
|
||||
List<EmblemEntry> emblems = ReadCsv<EmblemEntry, EmblemEntryMap>("emblems.csv");
|
||||
List<DegreeEntry> degrees = ReadCsv<DegreeEntry, DegreeEntryMap>("degrees.csv");
|
||||
List<SleeveEntry> sleeves = ReadCsv<SleeveEntry, SleeveEntryMap>("sleeves.csv");
|
||||
List<BattlefieldEntry> battlefields = ReadCsv<BattlefieldEntry, BattlefieldEntryMap>("battlefields.csv");
|
||||
List<MyPageBackgroundEntry> myPageBackgrounds = ReadCsv<MyPageBackgroundEntry, MyPageBackgroundEntryMap>("mypagebackgrounds.csv");
|
||||
List<RankInfoEntry> rankinfos = ReadCsv<RankInfoEntry, RankInfoEntryMap>("ranks.csv");
|
||||
List<ClassExpEntry> classexp = ReadCsv<ClassExpEntry, ClassExpEntryMap>("classexp.csv");
|
||||
|
||||
builder.Entity<ClassEntry>().HasData(classes);
|
||||
builder.Entity<LeaderSkinEntry>().HasData(leaderSkins);
|
||||
@@ -212,4 +157,4 @@ public class BaseDataSeeder : IDataSeeder
|
||||
builder.Entity<RankInfoEntry>().HasData(rankinfos);
|
||||
builder.Entity<ClassExpEntry>().HasData(classexp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using DCGEngine.Database.Interfaces;
|
||||
using SVSim.Database.Common;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SVSim.Database.Models;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user