get_isolated_balance.go raw

   1  package queries
   2  
   3  import (
   4  	"github.com/getAlby/hub/constants"
   5  	"gorm.io/gorm"
   6  )
   7  
   8  func GetIsolatedBalanceMsat(tx *gorm.DB, appId uint) (int64, error) {
   9  	var received struct {
  10  		Sum int64
  11  	}
  12  	err := tx.
  13  		Table("transactions").
  14  		Select("SUM(amount_msat) as sum").
  15  		Where("app_id = ? AND type = ? AND state = ?", appId, constants.TRANSACTION_TYPE_INCOMING, constants.TRANSACTION_STATE_SETTLED).Scan(&received).Error
  16  	if err != nil {
  17  		return 0, err
  18  	}
  19  
  20  	var spent struct {
  21  		Sum int64
  22  	}
  23  
  24  	err = tx.
  25  		Table("transactions").
  26  		Select("SUM(amount_msat + fee_msat + fee_reserve_msat) as sum").
  27  		Where("app_id = ? AND type = ? AND (state = ? OR state = ?)", appId, constants.TRANSACTION_TYPE_OUTGOING, constants.TRANSACTION_STATE_SETTLED, constants.TRANSACTION_STATE_PENDING).Scan(&spent).Error
  28  	if err != nil {
  29  		return 0, err
  30  	}
  31  
  32  	return received.Sum - spent.Sum, nil
  33  }
  34