namespace NeonSprawl.Server.Game.Rewards; /// Idempotent per-player reward delivery records (NEO-126). public interface IRewardDeliveryStore { /// First record returns true; replays for the same player+source return false. bool TryRecord(RewardDeliveryEvent deliveryEvent); bool TryGet(string playerId, string questId, out RewardDeliveryEvent deliveryEvent); bool TryGet(string playerId, string sourceKind, string sourceId, out RewardDeliveryEvent deliveryEvent); /// /// Dev fixture only — removes one delivery row so completion grants can re-apply on Bruno reset. /// Idempotent when the row is already absent. /// bool TryClear(string playerId, string questId); bool TryClear(string playerId, string sourceKind, string sourceId); }