using System.Text.Json; using Microsoft.EntityFrameworkCore; using SVSim.Bootstrap.Models.Seed; using SVSim.Database; using SVSim.Database.Models; namespace SVSim.Bootstrap.Importers; /// /// Idempotent upsert of daily-login-bonus campaign rows from seeds/daily-login-bonus.json. /// bonus_data array preserved verbatim — prod observed empty arrays outside active events. /// public class DailyLoginBonusImporter { public async Task ImportAsync(SVSimDbContext context, string seedDir) { var seed = SeedLoader.LoadList(Path.Combine(seedDir, "daily-login-bonus.json")); if (seed.Count == 0) return 0; var existing = await context.DailyLoginBonuses.ToDictionaryAsync(e => e.Id); int created = 0, updated = 0; foreach (var s in seed) { if (s.Id == 0) continue; var entry = existing.TryGetValue(s.Id, out var ex) ? ex : new DailyLoginBonusEntry { Id = s.Id }; entry.BonusData = s.BonusData.ValueKind == JsonValueKind.Undefined ? "[]" : JsonSerializer.Serialize(s.BonusData); if (ex is null) { context.DailyLoginBonuses.Add(entry); existing[s.Id] = entry; created++; } else updated++; } await context.SaveChangesAsync(); Console.WriteLine($"[DailyLoginBonusImporter] +{created}/~{updated}"); return created + updated; } }