@@ -76,6 +76,16 @@ type (
7676 // or for things like coin selection.
7777 QueryAssetFilters = sqlc.QueryAssetsParams
7878
79+ // QueryAssetBalancesByGroupFilters lets us query the asset balances for
80+ // asset groups or alternatively for a selected one that matches the
81+ // passed filter.
82+ QueryAssetBalancesByGroupFilters = sqlc.QueryAssetBalancesByGroupParams
83+
84+ // QueryAssetBalancesByAssetFilters lets us query the asset balances for
85+ // assets or alternatively for a selected one that matches the passed
86+ // filter.
87+ QueryAssetBalancesByAssetFilters = sqlc.QueryAssetBalancesByAssetParams
88+
7989 // UtxoQuery lets us query a managed UTXO by either the transaction it
8090 // references, or the outpoint.
8191 UtxoQuery = sqlc.FetchManagedUTXOParams
@@ -184,14 +194,15 @@ type ActiveAssetsStore interface {
184194 // QueryAssetBalancesByAsset queries the balances for assets or
185195 // alternatively for a selected one that matches the passed asset ID
186196 // filter.
187- QueryAssetBalancesByAsset (context.Context , [] byte ) ([] RawAssetBalance ,
188- error )
197+ QueryAssetBalancesByAsset (context.Context ,
198+ QueryAssetBalancesByAssetFilters ) ([] RawAssetBalance , error )
189199
190200 // QueryAssetBalancesByGroup queries the asset balances for asset
191201 // groups or alternatively for a selected one that matches the passed
192202 // filter.
193203 QueryAssetBalancesByGroup (context.Context ,
194- []byte ) ([]RawAssetGroupBalance , error )
204+ QueryAssetBalancesByGroupFilters ) ([]RawAssetGroupBalance ,
205+ error )
195206
196207 // FetchGroupedAssets fetches all assets with non-nil group keys.
197208 FetchGroupedAssets (context.Context ) ([]RawGroupedAsset , error )
@@ -960,18 +971,35 @@ type AssetQueryFilters struct {
960971// QueryBalancesByAsset queries the balances for assets or alternatively
961972// for a selected one that matches the passed asset ID filter.
962973func (a * AssetStore ) QueryBalancesByAsset (ctx context.Context ,
963- assetID * asset.ID ) (map [asset.ID ]AssetBalance , error ) {
974+ assetID * asset.ID ,
975+ includeLeased bool ) (map [asset.ID ]AssetBalance , error ) {
976+
977+ // We'll now map the application level filtering to the type of
978+ // filtering our database query understands.
979+ assetBalancesFilter := QueryAssetBalancesByAssetFilters {
980+ Now : sql.NullTime {
981+ Time : a .clock .Now ().UTC (),
982+ Valid : true ,
983+ },
984+ }
964985
965- var assetFilter []byte
986+ // By default, we only show assets that are not leased.
987+ if ! includeLeased {
988+ assetBalancesFilter .Leased = sqlBool (false )
989+ }
990+
991+ // Only show assets that match the filter that has been passed
966992 if assetID != nil {
967- assetFilter = assetID [:]
993+ assetBalancesFilter . AssetIDFilter = assetID [:]
968994 }
969995
970996 balances := make (map [asset.ID ]AssetBalance )
971997
972998 readOpts := NewAssetStoreReadTx ()
973999 dbErr := a .db .ExecTx (ctx , & readOpts , func (q ActiveAssetsStore ) error {
974- dbBalances , err := q .QueryAssetBalancesByAsset (ctx , assetFilter )
1000+ dbBalances , err := q .QueryAssetBalancesByAsset (
1001+ ctx , assetBalancesFilter ,
1002+ )
9751003 if err != nil {
9761004 return fmt .Errorf ("unable to query asset " +
9771005 "balances by asset: %w" , err )
@@ -1014,20 +1042,37 @@ func (a *AssetStore) QueryBalancesByAsset(ctx context.Context,
10141042// QueryAssetBalancesByGroup queries the asset balances for asset groups or
10151043// alternatively for a selected one that matches the passed filter.
10161044func (a * AssetStore ) QueryAssetBalancesByGroup (ctx context.Context ,
1017- groupKey * btcec.PublicKey ) (map [asset.SerializedKey ]AssetGroupBalance ,
1045+ groupKey * btcec.PublicKey ,
1046+ includeLeased bool ) (map [asset.SerializedKey ]AssetGroupBalance ,
10181047 error ) {
10191048
1020- var groupFilter []byte
1049+ // We'll now map the application level filtering to the type of
1050+ // filtering our database query understands.
1051+ assetBalancesFilter := QueryAssetBalancesByGroupFilters {
1052+ Now : sql.NullTime {
1053+ Time : a .clock .Now ().UTC (),
1054+ Valid : true ,
1055+ },
1056+ }
1057+
1058+ // By default, we only show assets that are not leased.
1059+ if ! includeLeased {
1060+ assetBalancesFilter .Leased = sqlBool (false )
1061+ }
1062+
1063+ // Only show specific group if a groupKey has been passed.
10211064 if groupKey != nil {
10221065 groupKeySerialized := groupKey .SerializeCompressed ()
1023- groupFilter = groupKeySerialized [:]
1066+ assetBalancesFilter . KeyGroupFilter = groupKeySerialized [:]
10241067 }
10251068
10261069 balances := make (map [asset.SerializedKey ]AssetGroupBalance )
10271070
10281071 readOpts := NewAssetStoreReadTx ()
10291072 dbErr := a .db .ExecTx (ctx , & readOpts , func (q ActiveAssetsStore ) error {
1030- dbBalances , err := q .QueryAssetBalancesByGroup (ctx , groupFilter )
1073+ dbBalances , err := q .QueryAssetBalancesByGroup (
1074+ ctx , assetBalancesFilter ,
1075+ )
10311076 if err != nil {
10321077 return fmt .Errorf ("unable to query asset " +
10331078 "balances by asset: %w" , err )
0 commit comments