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);
}
}