using System.Globalization; using CsvHelper; using CsvHelper.Configuration; using DCGEngine.Database.Interfaces; using Microsoft.EntityFrameworkCore; using SVSim.Database.Models; namespace SVSim.Database.DataSeeders; /// /// Loads base data aside from cards into the DB. Cards excluded due to how many of them there are. /// public class BaseDataSeeder : IDataSeeder { private class ClassEntryMap : ClassMap { public ClassEntryMap() { Map(m => m.Id).Name("id"); Map(m => m.Name).Name("name"); Map(m => m.DefaultLeaderSkin).Ignore(); } } private class LeaderSkinEntryMap : ClassMap { public LeaderSkinEntryMap() { Map(m => m.Id).Name("class_chara_id"); Map(m => m.Name).Name("class_chara_name"); Map(m => m.ClassId).Name("clan"); Map(m => m.Class).Ignore(); Map(m => m.Viewers).Ignore(); Map(m => m.EmoteId).Ignore(); } } private class EmblemEntryMap : ClassMap { public EmblemEntryMap() { Map(m => m.Id).Name("emblem_id"); } } private class SleeveEntryMap : ClassMap { public SleeveEntryMap() { Map(m => m.Id).Name("sleeve_id"); } } private class DegreeEntryMap : ClassMap { public DegreeEntryMap() { Map(m => m.Id).Name("degree_id"); } } private class BattlefieldEntryMap : ClassMap { public BattlefieldEntryMap() { Map(m => m.Id).Name("value"); Map(m => m.IsOpen).Name("is_open"); } } private class MyPageBackgroundEntryMap : ClassMap { public MyPageBackgroundEntryMap() { Map(m => m.Id).Name("id"); } } private class ClassExpEntryMap : ClassMap { public ClassExpEntryMap() { Map(m => m.Id).Name("level"); Map(m => m.NecessaryExp).Name("necessary_exp"); } } private class RankInfoEntryMap : ClassMap { public RankInfoEntryMap() { Map(m => m.Id).Name("rank_id"); Map(m => m.Name).Name("rank_name"); Map(m => m.NecessaryPoint).Name("necessary_point"); Map(m => m.AccumulatePoint).Name("accumulate_point"); Map(m => m.LowerLimitPoint).Name("lower_limit_point"); Map(m => m.BaseAddBp).Name("base_add_bp"); Map(m => m.BaseDropBp).Name("base_drop_bp"); Map(m => m.StreakBonusPt).Name("streak_bonus_pt"); Map(m => m.WinBonus).Name("win_bonus"); Map(m => m.LoseBonus).Name("lose_bonus"); Map(m => m.MaxWinBonus).Name("max_win_bonus"); Map(m => m.MaxLoseBonus).Name("max_lose_bonus"); Map(m => m.IsPromotionWar).Name("is_promotion_war"); Map(m => m.MatchCount).Name("match_count"); Map(m => m.NecessaryWin).Name("necessary_win"); Map(m => m.ResetLose).Name("reset_lose"); Map(m => m.AccumulateMasterPoint).Name("accumulate_master_point"); } } public void Seed(ModelBuilder builder) { List classes = new(); List leaderSkins = new(); List emblems = new(); List degrees = new(); List sleeves = new(); List battlefields = new(); List myPageBackgrounds = new(); List classexp = new(); List rankinfos = new(); using (StreamReader reader = new("data/classes.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); classes.AddRange(records); } using (StreamReader reader = new("data/leaderskins.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); leaderSkins.AddRange(records); leaderSkins.ForEach(skin => { if (skin.ClassId == 0) { skin.ClassId = null; } }); } // Load rest of default data using (StreamReader reader = new("data/emblems.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); emblems.AddRange(records); } using (StreamReader reader = new("data/degrees.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); degrees.AddRange(records); } using (StreamReader reader = new("data/sleeves.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); sleeves.AddRange(records); } using (StreamReader reader = new("data/battlefields.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); battlefields.AddRange(records); } using (StreamReader reader = new("data/mypagebackgrounds.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); myPageBackgrounds.AddRange(records); } using (StreamReader reader = new("data/ranks.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); rankinfos.AddRange(records); } using (StreamReader reader = new("data/classexp.csv")) { using CsvReader csv = new(reader, CultureInfo.InvariantCulture); csv.Context.RegisterClassMap(); IEnumerable records = csv.GetRecords(); classexp.AddRange(records); } builder.Entity().HasData(classes); builder.Entity().HasData(leaderSkins); builder.Entity().HasData(emblems); builder.Entity().HasData(sleeves); builder.Entity().HasData(degrees); builder.Entity().HasData(battlefields); builder.Entity().HasData(myPageBackgrounds); builder.Entity().HasData(rankinfos); builder.Entity().HasData(classexp); } }