dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit c140936700b66e008b2fc6aeae6378c4c2ea327f
parent 080bfbc535c13bfac85f2fbb056abe1e45c18f90
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 17 Dec 2023 08:31:00 -0500

db With

Diffstat:
Mpkg/database/database.go | 10++++++++++
Mpkg/web/handlers/poker/poker.go | 87+++++++++++++++++++++++++++++++++++++++++--------------------------------------
2 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/pkg/database/database.go b/pkg/database/database.go @@ -336,6 +336,16 @@ func Backup() error { return bk.Finish() } +func (d *DkfDB) With(clb func(tx *DkfDB) error) { + tx := d.Begin() + err := clb(tx) + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } +} + func (d *DkfDB) Begin() *DkfDB { return &DkfDB{db: d.db.Begin()} } diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -426,13 +426,13 @@ func (g *PokerGame) UnSitPlayer1(seatedPlayer *SeatedPlayer) error { if err != nil { return err } - tx := db.Begin() - incrUserChips(&user, g.PokerTableIsTest, account.Amount, false) - account.Amount = 0 - account.DoSave(tx) - user.DoSave(tx) - tx.Commit() - + db.With(func(tx *database.DkfDB) error { + incrUserChips(&user, g.PokerTableIsTest, account.Amount, false) + account.Amount = 0 + account.DoSave(tx) + user.DoSave(tx) + return nil + }) if ongoing != nil { if player := ongoing.GetPlayer(seatedPlayerUsername); player != nil { select { @@ -1154,31 +1154,32 @@ func applyGains(g *PokerGame, playersGain []PlayerGain, mainPot, rake database.P ongoing := g.Ongoing pokerTableID := g.PokerTableID nbPlayersGain := len(playersGain) - tx := g.DB.Begin() - if nbPlayersGain >= 1 { - winnerHand = utils.Ternary(nbPlayersGain == 1, playersGain[0].HandStr, "Split pot") + g.DB.With(func(tx *database.DkfDB) error { + if nbPlayersGain >= 1 { + winnerHand = utils.Ternary(nbPlayersGain == 1, playersGain[0].HandStr, "Split pot") - if !g.PokerTableIsTest { - _ = tx.IncrPokerCasinoRake(rake) - } - g.newLogEvent(fmt.Sprintf("Rake %d (%.2f%%)", rake, (float64(rake)/float64(mainPot))*100)) + if !g.PokerTableIsTest { + _ = tx.IncrPokerCasinoRake(rake) + } + g.newLogEvent(fmt.Sprintf("Rake %d (%.2f%%)", rake, (float64(rake)/float64(mainPot))*100)) - for _, el := range playersGain { - g.newLogEvent(fmt.Sprintf("Winner #%d: %s %s -> %d", el.Group, el.Player.Username, el.HandStr, el.Gain)) - winnersStr += el.Player.Username.String() + " " - el.Player.gain(tx, pokerTableID, el.Gain) - } - for _, op := range ongoing.Players { - op.resetBet() - } + for _, el := range playersGain { + g.newLogEvent(fmt.Sprintf("Winner #%d: %s %s -> %d", el.Group, el.Player.Username, el.HandStr, el.Gain)) + winnersStr += el.Player.Username.String() + " " + el.Player.gain(tx, pokerTableID, el.Gain) + } + for _, op := range ongoing.Players { + op.resetBet() + } - } else if nbPlayersGain == 0 { - // No winners, refund bets - for _, op := range ongoing.Players { - op.refundBet(tx, pokerTableID) + } else if nbPlayersGain == 0 { + // No winners, refund bets + for _, op := range ongoing.Players { + op.refundBet(tx, pokerTableID) + } } - } - tx.Commit() + return nil + }) return } @@ -1432,17 +1433,18 @@ func PokerFoldHandler(c echo.Context) error { func Refund(db *database.DkfDB) { accounts, _ := db.GetPositivePokerTableAccounts() - tx := db.Begin() - for _, account := range accounts { - if user, err := tx.GetUserByID(account.UserID); err == nil { - incrUserChips(&user, account.PokerTable.IsTest, account.Amount+account.AmountBet, false) - account.Amount = 0 - account.AmountBet = 0 - account.DoSave(tx) - user.DoSave(tx) + db.With(func(tx *database.DkfDB) error { + for _, account := range accounts { + if user, err := tx.GetUserByID(account.UserID); err == nil { + incrUserChips(&user, account.PokerTable.IsTest, account.Amount+account.AmountBet, false) + account.Amount = 0 + account.AmountBet = 0 + account.DoSave(tx) + user.DoSave(tx) + } } - } - tx.Commit() + return nil + }) } type RoomID string @@ -1564,10 +1566,11 @@ func PokerSitHandler(c echo.Context) error { PokerPubSub.Pub(roomUserTopic, ErrorMsgEvent{Message: err.Error()}) return c.HTML(http.StatusOK, html) } - tx := db.Begin() - authUser.DoSave(tx) - tableAccount.DoSave(tx) - tx.Commit() + db.With(func(tx *database.DkfDB) error { + authUser.DoSave(tx) + tableAccount.DoSave(tx) + return nil + }) PokerPubSub.Pub(roomTopic, PokerSeatTakenEvent{}) g.newLogEvent(fmt.Sprintf("%s sit", authUser.Username.String())) }