commit 8a6ac5c75a892d0a24957e18dc064120339fdc56
parent 63e2fd5b0cea949580bda0a28f85aa85c2e937aa
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 18 Dec 2023 15:31:49 -0500
cleanup
Diffstat:
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
+}