From d0d6a6916c96e08e8d8ecaa3e910829387abec8a Mon Sep 17 00:00:00 2001 From: gamer147 Date: Fri, 12 Jun 2026 12:52:06 -0400 Subject: [PATCH] fix(card-master): wire EnableServing kill switch in controller + add to config-section test --- .../Controllers/ImmutableDataController.cs | 11 ++++++++++- SVSim.UnitTests/Models/GameConfigurationJsonbTests.cs | 5 +++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/SVSim.EmulatedEntrypoint/Controllers/ImmutableDataController.cs b/SVSim.EmulatedEntrypoint/Controllers/ImmutableDataController.cs index 711a587f..44981e28 100644 --- a/SVSim.EmulatedEntrypoint/Controllers/ImmutableDataController.cs +++ b/SVSim.EmulatedEntrypoint/Controllers/ImmutableDataController.cs @@ -1,4 +1,6 @@ using Microsoft.AspNetCore.Mvc; +using SVSim.Database.Models.Config; +using SVSim.Database.Services; using SVSim.EmulatedEntrypoint.Models.Dtos.Requests.ImmutableData; using SVSim.EmulatedEntrypoint.Models.Dtos.Responses.ImmutableData; using SVSim.EmulatedEntrypoint.Services; @@ -13,10 +15,12 @@ namespace SVSim.EmulatedEntrypoint.Controllers; public class ImmutableDataController : SVSimController { private readonly ICardMasterPayloadProvider _provider; + private readonly IGameConfigService _config; - public ImmutableDataController(ICardMasterPayloadProvider provider) + public ImmutableDataController(ICardMasterPayloadProvider provider, IGameConfigService config) { _provider = provider; + _config = config; } /// @@ -32,6 +36,11 @@ public class ImmutableDataController : SVSimController // 500 not 503: blob missing is operator error (config / build), not transient — no retry will help. return StatusCode(500, "card-master payload not available"); } + if (!_config.Get().EnableServing) + { + // 503: explicit operator kill switch — temporarily disabled, distinct from 500 (misconfig). + return StatusCode(503, "card-master serving disabled"); + } return Ok(new CardMasterResponse { CardMaster = _provider.Base64Blob }); } } diff --git a/SVSim.UnitTests/Models/GameConfigurationJsonbTests.cs b/SVSim.UnitTests/Models/GameConfigurationJsonbTests.cs index 7dd3e3bf..5c3c4451 100644 --- a/SVSim.UnitTests/Models/GameConfigurationJsonbTests.cs +++ b/SVSim.UnitTests/Models/GameConfigurationJsonbTests.cs @@ -25,13 +25,14 @@ public class GameConfigurationJsonbTests var rows = await db.GameConfigs.AsNoTracking().ToListAsync(); var byName = rows.ToDictionary(r => r.SectionName); - // One row per [ConfigSection]-marked POCO (12 sections today: Player, DefaultGrants, + // One row per [ConfigSection]-marked POCO (13 sections today: Player, DefaultGrants, // DefaultLoadout, Challenge, Rotation, PackRates, MyRotationSchedule, Story, ResourceConfig, - // Freeplay, ArenaTwoPick, Matching). + // Freeplay, ArenaTwoPick, Matching, CardMasterConfig). Assert.That(byName.Keys, Is.EquivalentTo(new[] { "Player", "DefaultGrants", "DefaultLoadout", "Challenge", "Rotation", "PackRates", "MyRotationSchedule", "Story", "ResourceConfig", "Freeplay", "ArenaTwoPick", "Matching", + "CardMasterConfig", })); var resources = JsonSerializer.Deserialize(byName["ResourceConfig"].ValueJson)!;