namespace NeonSprawl.Server.Game.Gigs; /// Persisted totals of gig XP per player (NEO-44); level is derived when gig curves exist. public interface IPlayerGigProgressionStore { /// Keyed by gig id; omitted gigs imply XP 0. IReadOnlyDictionary GetXpTotals(string playerId); /// /// Adds to for . /// Returns false when the player cannot be written (e.g. in-memory store has no bucket; Postgres player missing from player_position). /// bool TryApplyXpDelta(string playerId, string gigId, int amount, out int previousXp, out int newXp); }