aboutsummaryrefslogtreecommitdiff
path: root/internal/game/money.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-10-06 12:57:23 -0400
committerhistoria <[not public]>2026-10-06 12:57:23 -0400
commit9666676766bf21364f4fc4d0d1d336e72f2a91b4 (patch)
tree0cade34091d7602790dc38cd44053f0b74bbadf2 /internal/game/money.go
parent4bc1daaf259e0c19c5fe4a12ec8bc7f6e5a735c1 (diff)
downloadthehouseoficarus-9666676766bf21364f4fc4d0d1d336e72f2a91b4.tar.gz
refactor: split casino.go, dedup helpers, remove audit docs
Diffstat (limited to 'internal/game/money.go')
-rw-r--r--internal/game/money.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/internal/game/money.go b/internal/game/money.go
index 6317df8..6965859 100644
--- a/internal/game/money.go
+++ b/internal/game/money.go
@@ -48,6 +48,20 @@ func removePendingWager(p *player.Player, id string) bool {
return removed
}
+// countUniqueNonEmpty returns the number of distinct non-empty IDs in ids.
+// PayCredits/PayPoker use it to fail closed when a payout names a stake that
+// is not present (or names one twice): paying it anyway would double-pay with
+// no ledger entry left for startup recovery.
+func countUniqueNonEmpty(ids []string) int {
+ seen := make(map[string]bool, len(ids))
+ for _, id := range ids {
+ if id != "" {
+ seen[id] = true
+ }
+ }
+ return len(seen)
+}
+
// takePendingWagers removes and returns the pending stakes whose IDs are
// listed, leaving the rest. It is used by a settlement that returns a
// specific set of stakes (a table hand).