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