forked from ebhomengo/niki
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.gocasts.ir/ebhomengo/niki/domain/wallet/entity"
|
|
"git.gocasts.ir/ebhomengo/niki/pkg/database/postgres"
|
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
|
)
|
|
|
|
func (db *DB) GetWalletByUserID(ctx context.Context, UserID uint64) (entity.Wallet, error) {
|
|
|
|
const op = richerror.Op("Wallet.repo.GetWalletByUserID")
|
|
|
|
query := `SELECT * FROM wallets WHERE user_id = $1`
|
|
|
|
/////////////// use instant query
|
|
|
|
wallet, err := postgres.InstantQueryRowContext[entity.Wallet](ctx, postgres.StatementKeyWalletGetUserWallet, query, db.conn, scanWallet, UserID)
|
|
if err != nil {
|
|
return entity.Wallet{}, richerror.New(op).WithErr(err)
|
|
}
|
|
|
|
return wallet, nil
|
|
|
|
//////////////////////normal
|
|
|
|
//stmt, stErr := db.conn.PrepareStatement(ctx, postgres.StatementKeyWalletGetUserWallet, query)
|
|
//if stErr != nil {
|
|
// return entity.Wallet{}, richerror.New(op).WithErr(stErr)
|
|
//}
|
|
//walletRow := db.conn.StmtQueryRowContext(ctx, stmt, UserID)
|
|
//
|
|
//wallet, sErr := scanWallet(walletRow)
|
|
//
|
|
//if sErr != nil {
|
|
// return entity.Wallet{}, richerror.New(op).WithErr(sErr)
|
|
//}
|
|
//
|
|
//return wallet, nil
|
|
|
|
}
|
|
|
|
func scanWallet(scanner postgres.Scanner) (entity.Wallet, error) {
|
|
|
|
var wallet entity.Wallet
|
|
|
|
err := scanner.Scan(&wallet.ID, &wallet.UserID, &wallet.Balance, &wallet.Currency, &wallet.Status, &wallet.UpdatedAt)
|
|
if err != nil {
|
|
return entity.Wallet{}, err
|
|
}
|
|
|
|
return wallet, nil
|
|
}
|