transactions.go raw
1 package models
2
3 import (
4 "encoding/json"
5 "strings"
6 "time"
7
8 "github.com/getAlby/hub/logger"
9 "github.com/getAlby/hub/transactions"
10 "github.com/sirupsen/logrus"
11 )
12
13 func ToNip47Transaction(transaction *transactions.Transaction) *Transaction {
14 var expiresAt *int64
15 if transaction.ExpiresAt != nil {
16 expiresAtUnix := transaction.ExpiresAt.Unix()
17 expiresAt = &expiresAtUnix
18 }
19
20 var settledAt *int64
21 preimage := ""
22 if transaction.SettledAt != nil {
23 settledAtUnix := transaction.SettledAt.Unix()
24 settledAt = &settledAtUnix
25 preimage = *transaction.Preimage
26 }
27
28 state := strings.ToLower(transaction.State)
29 if transaction.SettledAt == nil && transaction.ExpiresAt != nil && time.Now().After(*transaction.ExpiresAt) {
30 state = "expired"
31 }
32
33 var metadata map[string]interface{}
34 if transaction.Metadata != nil {
35 jsonErr := json.Unmarshal(transaction.Metadata, &metadata)
36 if jsonErr != nil {
37 logger.Logger.WithError(jsonErr).WithFields(logrus.Fields{
38 "payment_hash": transaction.PaymentHash,
39 "metadata": transaction.Metadata,
40 }).Error("Failed to deserialize transaction metadata")
41 }
42 }
43
44 return &Transaction{
45 Type: transaction.Type,
46 State: state,
47 Invoice: transaction.PaymentRequest,
48 Description: transaction.Description,
49 DescriptionHash: transaction.DescriptionHash,
50 Preimage: preimage,
51 PaymentHash: transaction.PaymentHash,
52 Amount: int64(transaction.AmountMsat),
53 FeesPaid: int64(transaction.FeeMsat),
54 CreatedAt: transaction.CreatedAt.Unix(),
55 ExpiresAt: expiresAt,
56 SettledAt: settledAt,
57 Metadata: metadata,
58 SettleDeadline: transaction.SettleDeadline,
59 }
60 }
61