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
|
}, 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
|
// FetchPayment retrieves a complete payment record from the database by its
|
||||||
// payment hash. The returned MPPayment includes all payment metadata such as
|
// payment hash. The returned MPPayment includes all payment metadata such as
|
||||||
// creation info, payment status, current state, all HTLC attempts (both
|
// 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
|
var mpPayment *MPPayment
|
||||||
|
|
||||||
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
|
||||||
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
|
dbPayment, err := fetchPaymentByHash(ctx, db, paymentHash)
|
||||||
if err != nil && !errors.Is(err, sql.ErrNoRows) {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to fetch payment: %w", err)
|
return err
|
||||||
}
|
|
||||||
|
|
||||||
if errors.Is(err, sql.ErrNoRows) {
|
|
||||||
return ErrPaymentNotInitiated
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mpPayment, err = fetchPaymentWithCompleteData(
|
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 {
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to fetch payment: %w", err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
paymentStatus, err := computePaymentStatusFromDB(
|
paymentStatus, err := computePaymentStatusFromDB(
|
||||||
@@ -897,7 +911,7 @@ func (s *SQLStore) DeleteFailedAttempts(paymentHash lntypes.Hash) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Then we delete the failed attempts for this payment.
|
// 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)
|
}, sqldb.NoOpReset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to delete failed attempts for "+
|
return fmt.Errorf("failed to delete failed attempts for "+
|
||||||
@@ -967,10 +981,9 @@ func (s *SQLStore) DeletePayment(paymentHash lntypes.Hash,
|
|||||||
ctx := context.TODO()
|
ctx := context.TODO()
|
||||||
|
|
||||||
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) 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 {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to fetch "+
|
return err
|
||||||
"payment: %w", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
paymentStatus, err := computePaymentStatusFromDB(
|
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 we are only deleting failed HTLCs, we delete them.
|
||||||
if failedHtlcsOnly {
|
if failedHtlcsOnly {
|
||||||
return db.DeleteFailedAttempts(
|
return db.DeleteFailedAttempts(
|
||||||
ctx, dbPayment.Payment.ID,
|
ctx, dbPayment.GetPayment().ID,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// In case we are not deleting failed HTLCs, we delete the
|
// In case we are not deleting failed HTLCs, we delete the
|
||||||
// payment which will cascade delete all related data.
|
// payment which will cascade delete all related data.
|
||||||
return db.DeletePayment(ctx, dbPayment.Payment.ID)
|
return db.DeletePayment(ctx, dbPayment.GetPayment().ID)
|
||||||
}, sqldb.NoOpReset)
|
}, sqldb.NoOpReset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to delete failed attempts for "+
|
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.
|
// Make sure the payment exists.
|
||||||
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
|
dbPayment, err := db.FetchPayment(ctx, paymentHash[:])
|
||||||
if err != nil {
|
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
|
// 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
|
var mpPayment *MPPayment
|
||||||
|
|
||||||
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) 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 {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to fetch payment: %w", err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
paymentStatus, err := computePaymentStatusFromDB(
|
paymentStatus, err := computePaymentStatusFromDB(
|
||||||
@@ -1468,9 +1481,10 @@ func (s *SQLStore) FailAttempt(paymentHash lntypes.Hash,
|
|||||||
var mpPayment *MPPayment
|
var mpPayment *MPPayment
|
||||||
|
|
||||||
err := s.db.ExecTx(ctx, sqldb.WriteTxOpt(), func(db SQLQueries) error {
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to fetch payment: %w", err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
paymentStatus, err := computePaymentStatusFromDB(
|
paymentStatus, err := computePaymentStatusFromDB(
|
||||||
|
|||||||
Reference in new issue
Block a user