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 }