dkforest

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

commit 8a6ac5c75a892d0a24957e18dc064120339fdc56
parent 63e2fd5b0cea949580bda0a28f85aa85c2e937aa
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon, 18 Dec 2023 15:31:49 -0500

cleanup

Diffstat:
Mpkg/web/handlers/handlers.go | 146++++++++++++++++++++++++++++++++++++++++++-------------------------------------
1 file changed, 77 insertions(+), 69 deletions(-)

diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -844,49 +844,7 @@ func PokerHomeHandler(c echo.Context) error { if formName == "join_table" { pokerTableSlug := c.Request().PostFormValue("table_slug") playerBuyIn := database.PokerChip(utils.DoParseUint64(c.Request().PostFormValue("buy_in"))) - if err := db.WithE(func(tx *database.DkfDB) error { - authUserID := authUser.ID - if g := poker.PokerInstance.GetGame(poker.RoomID(pokerTableSlug)); g != nil { - g.Players.Lock() - defer g.Players.Unlock() - if g.IsSeated2(authUserID) { - return errors.New("cannot buy-in while seated") - } - } - pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) - if err != nil { - return errors.New("table mot found") - } - if playerBuyIn < pokerTable.MinBuyIn { - return errors.New("buy in too small") - } - if playerBuyIn > pokerTable.MaxBuyIn { - return errors.New("buy in too high") - } - xmrBalance, chipsTestBalance, err := tx.GetUserBalances(authUserID) - if err != nil { - return errors.New("failed to get user's balance") - } - userChips := utils.Ternary(pokerTable.IsTest, chipsTestBalance, xmrBalance.ToPokerChip()) - if userChips < playerBuyIn { - return errors.New("not enough chips to buy-in") - } - tableAccount, err := tx.GetPokerTableAccount(authUserID, pokerTable.ID) - if err != nil { - return errors.New("failed to get table account") - } - if tableAccount.Amount+playerBuyIn > pokerTable.MaxBuyIn { - return errors.New("buy-in exceed table max buy-in") - } - tableAccount.Amount += playerBuyIn - if err := tx.DecrUserBalance(authUserID, pokerTable.IsTest, playerBuyIn); err != nil { - return errors.New("failed to update user's balance") - } - if err := tableAccount.Save(tx); err != nil { - return errors.New("failed to update user's table account") - } - return nil - }); err != nil { + if err := doJoinTable(db, pokerTableSlug, playerBuyIn, authUser.ID); err != nil { data.ErrorTable = err.Error() return c.Render(http.StatusOK, "poker", data) } @@ -894,32 +852,7 @@ func PokerHomeHandler(c echo.Context) error { } else if formName == "cash_out" { pokerTableSlug := c.Request().PostFormValue("table_slug") - if err := db.WithE(func(tx *database.DkfDB) error { - authUserID := authUser.ID - if g := poker.PokerInstance.GetGame(poker.RoomID(pokerTableSlug)); g != nil { - g.Players.Lock() - defer g.Players.Unlock() - if g.IsSeated2(authUserID) { - return errors.New("cannot cash out while seated") - } - } - pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) - if err != nil { - return errors.New("table mot found") - } - account, err := tx.GetPokerTableAccount(authUserID, pokerTable.ID) - if err != nil { - return errors.New("failed to get table account") - } - if err := tx.IncrUserBalance(authUserID, pokerTable.IsTest, account.Amount); err != nil { - return errors.New("failed to update user's balance") - } - account.Amount = 0 - if err := account.Save(tx); err != nil { - return errors.New("failed to update user's table account") - } - return nil - }); err != nil { + if err := doCashOut(db, pokerTableSlug, authUser.ID); err != nil { data.ErrorTable = err.Error() return c.Render(http.StatusOK, "poker", data) } @@ -1032,3 +965,78 @@ func PokerHomeHandler(c echo.Context) error { pokerWithdrawCache.Delete(authUser.ID) return c.Redirect(http.StatusFound, c.Request().Referer()) } + +func doJoinTable(db *database.DkfDB, pokerTableSlug string, playerBuyIn database.PokerChip, userID database.UserID) error { + err := db.WithE(func(tx *database.DkfDB) error { + if g := poker.PokerInstance.GetGame(poker.RoomID(pokerTableSlug)); g != nil { + g.Players.Lock() + defer g.Players.Unlock() + if g.IsSeated2(userID) { + return errors.New("cannot buy-in while seated") + } + } + pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) + if err != nil { + return errors.New("table mot found") + } + if playerBuyIn < pokerTable.MinBuyIn { + return errors.New("buy in too small") + } + if playerBuyIn > pokerTable.MaxBuyIn { + return errors.New("buy in too high") + } + xmrBalance, chipsTestBalance, err := tx.GetUserBalances(userID) + if err != nil { + return errors.New("failed to get user's balance") + } + userChips := utils.Ternary(pokerTable.IsTest, chipsTestBalance, xmrBalance.ToPokerChip()) + if userChips < playerBuyIn { + return errors.New("not enough chips to buy-in") + } + tableAccount, err := tx.GetPokerTableAccount(userID, pokerTable.ID) + if err != nil { + return errors.New("failed to get table account") + } + if tableAccount.Amount+playerBuyIn > pokerTable.MaxBuyIn { + return errors.New("buy-in exceed table max buy-in") + } + tableAccount.Amount += playerBuyIn + if err := tx.DecrUserBalance(userID, pokerTable.IsTest, playerBuyIn); err != nil { + return errors.New("failed to update user's balance") + } + if err := tableAccount.Save(tx); err != nil { + return errors.New("failed to update user's table account") + } + return nil + }) + return err +} + +func doCashOut(db *database.DkfDB, pokerTableSlug string, userID database.UserID) error { + err := db.WithE(func(tx *database.DkfDB) error { + if g := poker.PokerInstance.GetGame(poker.RoomID(pokerTableSlug)); g != nil { + g.Players.Lock() + defer g.Players.Unlock() + if g.IsSeated2(userID) { + return errors.New("cannot cash out while seated") + } + } + pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) + if err != nil { + return errors.New("table mot found") + } + account, err := tx.GetPokerTableAccount(userID, pokerTable.ID) + if err != nil { + return errors.New("failed to get table account") + } + if err := tx.IncrUserBalance(userID, pokerTable.IsTest, account.Amount); err != nil { + return errors.New("failed to update user's balance") + } + account.Amount = 0 + if err := account.Save(tx); err != nil { + return errors.New("failed to update user's table account") + } + return nil + }) + return err +}