niki/domain/wallet/repository/postgres/get_wallet.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, &wallet.CreatedAt, &wallet.CreatedAt)
if err != nil {
return entity.Wallet{}, err
}
return wallet, nil
}