using Microsoft.EntityFrameworkCore; using SVSim.Bootstrap.Models.Seed; using SVSim.Database; using SVSim.Database.Enums; using SVSim.Database.Models; namespace SVSim.Bootstrap.Importers; /// /// Idempotent upsert of rows from /// arena-two-pick-rewards.json. Key = (WinCount, RewardGroup, RewardType, RewardId, RewardNum). /// public class ArenaTwoPickRewardImporter { public async Task ImportAsync(SVSimDbContext context, string seedDir) { var path = Path.Combine(seedDir, "arena-two-pick-rewards.json"); if (!File.Exists(path)) { Console.WriteLine($"[ArenaTwoPickRewardImporter] missing {path}; skipping."); return 0; } var seeds = SeedLoader.LoadList(path); var existing = await context.ArenaTwoPickRewards .ToDictionaryAsync(r => (r.WinCount, r.RewardGroup, r.RewardType, r.RewardId, r.RewardNum)); int upserted = 0; foreach (var s in seeds) { if (existing.TryGetValue((s.WinCount, s.RewardGroup, (UserGoodsType)s.RewardType, s.RewardId, s.RewardNum), out var row)) { row.Weight = s.Weight; } else { context.ArenaTwoPickRewards.Add(new ArenaTwoPickReward { WinCount = s.WinCount, RewardGroup = s.RewardGroup, Weight = s.Weight, RewardType = (UserGoodsType)s.RewardType, RewardId = s.RewardId, RewardNum = s.RewardNum, }); } upserted++; } await context.SaveChangesAsync(); Console.WriteLine($"[ArenaTwoPickRewardImporter] upserted={upserted}"); return upserted; } }