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