paymentsdb: add a wrapper to the fetchpayment method

We wrap the fetchPayment db call and catch the case where no errors
are found in the db, where we now return the ErrPaymentNotInitiated
error.
This commit is contained in:
ziggie committed 2026-02-25 08:02:16 +01:00
1 parent ff12082452
commit 218a30d16e
1 file changed
+34 -20
+34 -20
View File
@@ -801,6 +801,24 @@ func (s *SQLStore) QueryPayments(ctx context.Context, query Query) (Response,
}, nil
}
// fetchPaymentByHash fetches a payment by its hash from the database. It is a
// convenience wrapper around the FetchPayment method and checks for
// no rows error and returns ErrPaymentNotInitiated if no payment is found.
func fetchPaymentByHash(ctx context.Context, db SQLQueries,
paymentHash lntypes.Hash) (sqlc.FetchPaymentRow, error) {
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return dbPayment, fmt.Errorf("failed to fetch payment: %w", err)
}
if errors.Is(err, sql.ErrNoRows) {
return dbPayment, ErrPaymentNotInitiated
}
return dbPayment, nil
}
// FetchPayment retrieves a complete payment record from the database by its
// payment hash. The returned MPPayment includes all payment metadata such as
// creation info, payment status, current state, all HTLC attempts (both
@@ -816,13 +834,9 @@ func (s *SQLStore) FetchPayment(paymentHash lntypes.Hash) (*MPPayment, error) {
var mpPayment *MPPayment
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return fmt.Errorf("failed to fetch payment: %w", err)
}
if errors.Is(err, sql.ErrNoRows) {
return ErrPaymentNotInitiated
dbPayment, err := fetchPaymentByHash(ctx, db, paymentHash)
if err != nil {
return err
}
mpPayment, err = fetchPaymentWithCompleteData(
@@ -878,9 +892,9 @@ func (s *SQLStore) DeleteFailedAttempts(paymentHash lntypes.Hash) error {
}
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) error {
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
dbPayment, err := fetchPaymentByHash(ctx, db, paymentHash)
if err != nil {
return fmt.Errorf("failed to fetch payment: %w", err)
return err
}
paymentStatus, err := computePaymentStatusFromDB(
@@ -897,7 +911,7 @@ func (s *SQLStore) DeleteFailedAttempts(paymentHash lntypes.Hash) error {
}
// Then we delete the failed attempts for this payment.
return db.DeleteFailedAttempts(ctx, dbPayment.Payment.ID)
return db.DeleteFailedAttempts(ctx, dbPayment.GetPayment().ID)
}, sqldb.NoOpReset)
if err != nil {
return fmt.Errorf("failed to delete failed attempts for "+
@@ -967,10 +981,9 @@ func (s *SQLStore) DeletePayment(paymentHash lntypes.Hash,
ctx := context.TODO()
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) error {
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
dbPayment, err := fetchPaymentByHash(ctx, db, paymentHash)
if err != nil {
return fmt.Errorf("failed to fetch "+
"payment: %w", err)
return err
}
paymentStatus, err := computePaymentStatusFromDB(
@@ -989,13 +1002,13 @@ func (s *SQLStore) DeletePayment(paymentHash lntypes.Hash,
// If we are only deleting failed HTLCs, we delete them.
if failedHtlcsOnly {
return db.DeleteFailedAttempts(
ctx, dbPayment.Payment.ID,
ctx, dbPayment.GetPayment().ID,
)
}
// In case we are not deleting failed HTLCs, we delete the
// payment which will cascade delete all related data.
return db.DeletePayment(ctx, dbPayment.Payment.ID)
return db.DeletePayment(ctx, dbPayment.GetPayment().ID)
}, sqldb.NoOpReset)
if err != nil {
return fmt.Errorf("failed to delete failed attempts for "+
@@ -1269,7 +1282,7 @@ func (s *SQLStore) RegisterAttempt(paymentHash lntypes.Hash,
// Make sure the payment exists.
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
if err != nil {
return fmt.Errorf("failed to fetch payment: %w", err)
return err
}
// We fetch the complete payment to determine if the payment is
@@ -1393,9 +1406,9 @@ func (s *SQLStore) SettleAttempt(paymentHash lntypes.Hash,
var mpPayment *MPPayment
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) error {
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
dbPayment, err := fetchPaymentByHash(ctx, db, paymentHash)
if err != nil {
return fmt.Errorf("failed to fetch payment: %w", err)
return err
}
paymentStatus, err := computePaymentStatusFromDB(
@@ -1468,9 +1481,10 @@ func (s *SQLStore) FailAttempt(paymentHash lntypes.Hash,
var mpPayment *MPPayment
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) error {
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
// Make sure the payment exists.
dbPayment, err := fetchPaymentByHash(ctx, db, paymentHash)
if err != nil {
return fmt.Errorf("failed to fetch payment: %w", err)
return err
}
paymentStatus, err := computePaymentStatusFromDB(