1
- package db
1
+ package apps
2
2
3
3
import (
4
4
"encoding/hex"
@@ -9,26 +9,32 @@ import (
9
9
"time"
10
10
11
11
"github.com/getAlby/hub/constants"
12
+ "github.com/getAlby/hub/db"
12
13
"github.com/getAlby/hub/events"
13
14
"github.com/getAlby/hub/logger"
14
15
"github.com/nbd-wtf/go-nostr"
15
16
"gorm.io/datatypes"
16
17
"gorm.io/gorm"
17
18
)
18
19
19
- type dbService struct {
20
+ type AppsService interface {
21
+ CreateApp (name string , pubkey string , maxAmountSat uint64 , budgetRenewal string , expiresAt * time.Time , scopes []string , isolated bool , metadata map [string ]interface {}) (* db.App , string , error )
22
+ GetAppByPubkey (pubkey string ) * db.App
23
+ }
24
+
25
+ type appsService struct {
20
26
db * gorm.DB
21
27
eventPublisher events.EventPublisher
22
28
}
23
29
24
- func NewDBService (db * gorm.DB , eventPublisher events.EventPublisher ) * dbService {
25
- return & dbService {
30
+ func NewAppsService (db * gorm.DB , eventPublisher events.EventPublisher ) * appsService {
31
+ return & appsService {
26
32
db : db ,
27
33
eventPublisher : eventPublisher ,
28
34
}
29
35
}
30
36
31
- func (svc * dbService ) CreateApp (name string , pubkey string , maxAmountSat uint64 , budgetRenewal string , expiresAt * time.Time , scopes []string , isolated bool , metadata map [string ]interface {}) (* App , string , error ) {
37
+ func (svc * appsService ) CreateApp (name string , pubkey string , maxAmountSat uint64 , budgetRenewal string , expiresAt * time.Time , scopes []string , isolated bool , metadata map [string ]interface {}) (* db. App , string , error ) {
32
38
if isolated && (slices .Contains (scopes , constants .SIGN_MESSAGE_SCOPE )) {
33
39
// cannot sign messages because the isolated app is a custodial subaccount
34
40
return nil , "" , errors .New ("isolated app cannot have sign_message scope" )
@@ -59,7 +65,7 @@ func (svc *dbService) CreateApp(name string, pubkey string, maxAmountSat uint64,
59
65
}
60
66
}
61
67
62
- app := App {Name : name , NostrPubkey : pairingPublicKey , Isolated : isolated , Metadata : datatypes .JSON (metadataBytes )}
68
+ app := db. App {Name : name , NostrPubkey : pairingPublicKey , Isolated : isolated , Metadata : datatypes .JSON (metadataBytes )}
63
69
64
70
err := svc .db .Transaction (func (tx * gorm.DB ) error {
65
71
err := tx .Save (& app ).Error
@@ -68,7 +74,7 @@ func (svc *dbService) CreateApp(name string, pubkey string, maxAmountSat uint64,
68
74
}
69
75
70
76
for _ , scope := range scopes {
71
- appPermission := AppPermission {
77
+ appPermission := db. AppPermission {
72
78
App : app ,
73
79
Scope : scope ,
74
80
ExpiresAt : expiresAt ,
@@ -100,3 +106,12 @@ func (svc *dbService) CreateApp(name string, pubkey string, maxAmountSat uint64,
100
106
101
107
return & app , pairingSecretKey , nil
102
108
}
109
+
110
+ func (svc * appsService ) GetAppByPubkey (pubkey string ) * db.App {
111
+ dbApp := db.App {}
112
+ findResult := svc .db .Where ("nostr_pubkey = ?" , pubkey ).First (& dbApp )
113
+ if findResult .RowsAffected == 0 {
114
+ return nil
115
+ }
116
+ return & dbApp
117
+ }
0 commit comments