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:
1 file changed
+34
-20
+34
-20
@@ -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(
|
||||
|
||||
Reference in new issue
Block a user