dkforest

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

commit 181955800fd96a1469f75a9dd0b2a61ad1a50e31
parent 88cf824d3a8be65bddbfc75f6a126572a31b9335
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 17 Dec 2023 21:17:58 -0500

generate user new deposit address when a transaction is detected

Diffstat:
Mpkg/actions/actions.go | 20+++++++++++++++++---
Mpkg/database/tablePokerXmrTransactions.go | 29++++++++++++++++-------------
Mpkg/database/tableUsers.go | 5+++++
3 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/pkg/actions/actions.go b/pkg/actions/actions.go @@ -231,10 +231,24 @@ func xmrWatch(db *database.DkfDB) { } for _, transfer := range transfers.In { if user, err := db.GetUserByPokerXmrSubAddress(transfer.Address); err == nil { - pokerTransfer, err := db.GetOrCreatePokerXmrTransaction(user.ID, transfer) + userID := user.ID + pokerTransfer, err := db.GetPokerXmrTransaction(transfer) if err != nil { - logrus.Error(err) - continue + db.WithE(func(tx *database.DkfDB) error { + pokerTransfer, err = tx.CreatePokerXmrInTransaction(userID, transfer) + if err != nil { + return err + } + // Update user's xmr deposit address + res, err := config.Xmr().CreateAddress(&wallet1.RequestCreateAddress{}) + if err != nil { + return err + } + if err := tx.SetPokerSubAddress(userID, res.Address); err != nil { + return err + } + return nil + }) } if pokerTransfer.Processed { continue diff --git a/pkg/database/tablePokerXmrTransactions.go b/pkg/database/tablePokerXmrTransactions.go @@ -44,20 +44,23 @@ func (d *DkfDB) GetUserPokerXmrTransactions(userID UserID) (out []PokerXmrTransa return } -func (d *DkfDB) GetOrCreatePokerXmrTransaction(userID UserID, transfer *wallet.Transfer) (out PokerXmrTransaction, err error) { - if err = d.db.First(&out, "tx_id = ?", transfer.TxID).Error; err != nil { - out = PokerXmrTransaction{ - TxID: transfer.TxID, - UserID: userID, - Address: transfer.Address, - Height: transfer.Height, - Amount: Piconero(transfer.Amount), - Fee: Piconero(transfer.Fee), - Confirmations: transfer.Confirmations, - IsIn: true, - } - err = d.db.Create(&out).Error +func (d *DkfDB) GetPokerXmrTransaction(transfer *wallet.Transfer) (out PokerXmrTransaction, err error) { + err = d.db.First(&out, "tx_id = ?", transfer.TxID).Error + return +} + +func (d *DkfDB) CreatePokerXmrInTransaction(userID UserID, transfer *wallet.Transfer) (out PokerXmrTransaction, err error) { + out = PokerXmrTransaction{ + TxID: transfer.TxID, + UserID: userID, + Address: transfer.Address, + Height: transfer.Height, + Amount: Piconero(transfer.Amount), + Fee: Piconero(transfer.Fee), + Confirmations: transfer.Confirmations, + IsIn: true, } + err = d.db.Create(&out).Error return } diff --git a/pkg/database/tableUsers.go b/pkg/database/tableUsers.go @@ -694,3 +694,8 @@ func (db *DkfDB) GetUsersXmrBalance() (out Piconero, err error) { err = db.db.Raw(`SELECT SUM(xmr_balance) as sum_xmr_balance FROM users`).Scan(&tmp).Error return tmp.SumXmrBalance, err } + +func (d *DkfDB) SetPokerSubAddress(userID UserID, subAddress string) (err error) { + err = d.db.Exec(`UPDATE users SET poker_xmr_sub_address = ? WHERE id = ?`, subAddress, userID).Error + return +}