From 448153d592dc00e398717a3c0831b6133a6ce8f6 Mon Sep 17 00:00:00 2001 From: gamer147 Date: Sat, 4 Jul 2026 11:52:53 -0400 Subject: [PATCH] refactor(admin,item-purchase): migrate to IGameCalendarService Swaps 6 JstPeriod.* callsites across AdminController (mission counter resolution for the /admin catalog) and ItemPurchaseController (monthly reset bucket key + all-time period). Co-Authored-By: Claude Opus 4.7 --- .../Controllers/AdminController.cs | 12 +++++++----- .../Controllers/ItemPurchaseController.cs | 10 ++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/SVSim.EmulatedEntrypoint/Controllers/AdminController.cs b/SVSim.EmulatedEntrypoint/Controllers/AdminController.cs index d0139df0..bfbb9eab 100644 --- a/SVSim.EmulatedEntrypoint/Controllers/AdminController.cs +++ b/SVSim.EmulatedEntrypoint/Controllers/AdminController.cs @@ -24,13 +24,15 @@ public class AdminController : SVSimController private readonly IViewerRepository _viewerRepository; private readonly SVSimDbContext _dbContext; private readonly ILogger _logger; + private readonly IGameCalendarService _calendar; public AdminController(IViewerRepository viewerRepository, SVSimDbContext dbContext, - ILogger logger) + ILogger logger, IGameCalendarService calendar) { _viewerRepository = viewerRepository; _dbContext = dbContext; _logger = logger; + _calendar = calendar; } /// @@ -610,13 +612,13 @@ public class AdminController : SVSimController } // TODO: unify with MissionAssembler.cs — same logic duplicated here. - private static (string EventKey, string Period)? ResolveMissionCounter(MissionCatalogEntry catalog, DateTimeOffset nowUtc) + private (string EventKey, string Period)? ResolveMissionCounter(MissionCatalogEntry catalog, DateTimeOffset nowUtc) { if (string.IsNullOrEmpty(catalog.EventType)) return null; var period = catalog.LotType switch { - 6 => JstPeriod.DayKey(nowUtc), - 2 => JstPeriod.WeekKey(nowUtc), + 6 => _calendar.DayKey(nowUtc), + 2 => _calendar.WeekKey(nowUtc), _ => null }; if (period is null) return null; @@ -627,7 +629,7 @@ public class AdminController : SVSimController private static (string EventKey, string Period)? ResolveAchievementCounter(AchievementCatalogEntry catalog) { if (string.IsNullOrEmpty(catalog.EventType)) return null; - return (catalog.EventType!, JstPeriod.AllTime); + return (catalog.EventType!, GameCalendarService.AllTime); } /// diff --git a/SVSim.EmulatedEntrypoint/Controllers/ItemPurchaseController.cs b/SVSim.EmulatedEntrypoint/Controllers/ItemPurchaseController.cs index f39a5fcf..e354a312 100644 --- a/SVSim.EmulatedEntrypoint/Controllers/ItemPurchaseController.cs +++ b/SVSim.EmulatedEntrypoint/Controllers/ItemPurchaseController.cs @@ -24,12 +24,14 @@ public class ItemPurchaseController : SVSimController private readonly SVSimDbContext _db; private readonly IInventoryService _inv; private readonly TimeProvider _time; + private readonly IGameCalendarService _calendar; - public ItemPurchaseController(SVSimDbContext db, IInventoryService inv, TimeProvider time) + public ItemPurchaseController(SVSimDbContext db, IInventoryService inv, TimeProvider time, IGameCalendarService calendar) { _db = db; _inv = inv; _time = time; + _calendar = calendar; } [HttpPost("info")] @@ -43,7 +45,7 @@ public class ItemPurchaseController : SVSimController .ToListAsync(); var now = _time.GetUtcNow(); - var monthKey = JstPeriod.MonthKey(now); + var monthKey = _calendar.MonthKey(now); var keys = catalog.Select(c => CounterKey(c.Id)).ToList(); var counters = await _db.ViewerEventCounters .Where(c => c.ViewerId == viewerId && keys.Contains(c.EventKey)) @@ -104,7 +106,7 @@ public class ItemPurchaseController : SVSimController return BadRequest(new { error = "unknown_purchase" }); var now = _time.GetUtcNow(); - var period = entry.IsMonthlyReset ? JstPeriod.MonthKey(now) : JstPeriod.AllTime; + var period = entry.IsMonthlyReset ? _calendar.MonthKey(now) : GameCalendarService.AllTime; var key = CounterKey(entry.Id); var counter = await _db.ViewerEventCounters @@ -162,7 +164,7 @@ public class ItemPurchaseController : SVSimController private static int CounterCount(List counters, ItemPurchaseCatalogEntry entry, string monthKey) { - var period = entry.IsMonthlyReset ? monthKey : JstPeriod.AllTime; + var period = entry.IsMonthlyReset ? monthKey : GameCalendarService.AllTime; return counters.FirstOrDefault(c => c.EventKey == CounterKey(entry.Id) && c.Period == period)?.Count ?? 0; } }