commit c140936700b66e008b2fc6aeae6378c4c2ea327f
parent 080bfbc535c13bfac85f2fbb056abe1e45c18f90
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 17 Dec 2023 08:31:00 -0500
db With
Diffstat:
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()))
}