diff --git a/SVSim.Database/Repositories/Card/ICardInventoryRepository.cs b/SVSim.Database/Repositories/Card/ICardInventoryRepository.cs index 90bb475..bedb6f4 100644 --- a/SVSim.Database/Repositories/Card/ICardInventoryRepository.cs +++ b/SVSim.Database/Repositories/Card/ICardInventoryRepository.cs @@ -26,6 +26,12 @@ public interface ICardInventoryRepository /// /// cardId → num_to_create. Empty dict is rejected by the caller. Task CreateCards(long viewerId, IReadOnlyDictionary createCounts); + + /// + /// Toggle the flag for a single card. Idempotent. + /// Accepts cards with Count=0 (preserves the destruct→re-craft round-trip invariant). + /// + Task SetProtected(long viewerId, long cardId, bool isProtected); } /// @@ -75,3 +81,14 @@ public enum CreateError WouldExceedMaxCopies, InsufficientVials, } + +public sealed record ProtectOutcome(bool IsSuccess, ProtectError? Error) +{ + public static ProtectOutcome Ok() => new(true, null); + public static ProtectOutcome Fail(ProtectError e) => new(false, e); +} + +public enum ProtectError +{ + UnknownCard, +}