diff --git a/services/skus/credentials.go b/services/skus/credentials.go index c243c56fd..a171e5982 100644 --- a/services/skus/credentials.go +++ b/services/skus/credentials.go @@ -362,7 +362,7 @@ func (s *Service) doCredsExist(ctx context.Context, item *model.OrderItem) error // Check if we already have a signing request for this order, delete order creds will // delete the prior signing request. // This allows subscriptions to manage how many order creds are handed out. - signingOrderRequests, err := s.Datastore.GetSigningOrderRequestOutboxByOrderItem(ctx, item.ID) + signingOrderRequests, err := s.Datastore.GetSigningOrderRequestOutboxByOrderItem(ctx, item.OrderID, item.ID) if err != nil { return fmt.Errorf("error validating no credentials exist for order item: %w", err) } diff --git a/services/skus/datastore.go b/services/skus/datastore.go index 2edeba78a..07e2a1afb 100644 --- a/services/skus/datastore.go +++ b/services/skus/datastore.go @@ -87,7 +87,7 @@ type Datastore interface { InsertSigningOrderRequestOutbox(ctx context.Context, requestID uuid.UUID, orderID uuid.UUID, itemID uuid.UUID, signingOrderRequest SigningOrderRequest) error GetSigningOrderRequestOutboxByRequestID(ctx context.Context, dbi sqlx.QueryerContext, reqID uuid.UUID) (*SigningOrderRequestOutbox, error) GetSigningOrderRequestOutboxByOrder(ctx context.Context, orderID uuid.UUID) ([]SigningOrderRequestOutbox, error) - GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, itemID uuid.UUID) ([]SigningOrderRequestOutbox, error) + GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, orderID, itemID uuid.UUID) ([]SigningOrderRequestOutbox, error) DeleteSigningOrderRequestOutboxByOrderTx(ctx context.Context, tx *sqlx.Tx, orderID uuid.UUID) error UpdateSigningOrderRequestOutboxTx(ctx context.Context, tx *sqlx.Tx, requestID uuid.UUID, completedAt time.Time) error AppendOrderMetadata(context.Context, *uuid.UUID, string, string) error @@ -1078,15 +1078,15 @@ func (pg *Postgres) GetSigningOrderRequestOutboxByOrder(ctx context.Context, ord // GetSigningOrderRequestOutboxByOrderItem retrieves the latest signing order from the outbox. // An empty result set is returned if no rows are found. -func (pg *Postgres) GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, itemID uuid.UUID) ([]SigningOrderRequestOutbox, error) { - var signingRequestOutbox []SigningOrderRequestOutbox - err := pg.RawDB().SelectContext(ctx, &signingRequestOutbox, - `select request_id, order_id, item_id, completed_at, message_data - from signing_order_request_outbox where item_id = $1`, itemID) - if err != nil { +func (pg *Postgres) GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, orderID, itemID uuid.UUID) ([]SigningOrderRequestOutbox, error) { + var result []SigningOrderRequestOutbox + + const q = `SELECT request_id, order_id, item_id, completed_at, message_data FROM signing_order_request_outbox WHERE order_id=$1 AND item_id=$2;` + if err := pg.RawDB().SelectContext(ctx, &result, q, orderID, itemID); err != nil { return nil, fmt.Errorf("error retrieving signing requests from outbox: %w", err) } - return signingRequestOutbox, nil + + return result, nil } // GetSigningOrderRequestOutboxByRequestID retrieves the SigningOrderRequestOutbox by requestID. diff --git a/services/skus/datastore_test.go b/services/skus/datastore_test.go index 6a78db6b3..b49bbb6f7 100644 --- a/services/skus/datastore_test.go +++ b/services/skus/datastore_test.go @@ -446,7 +446,7 @@ func (suite *PostgresTestSuite) TestInsertSigningOrderRequestOutbox() { err := suite.storage.InsertSigningOrderRequestOutbox(ctx, requestID, orderID, itemID, signingOrderRequest) suite.Require().NoError(err) - signingOrderRequests, err := suite.storage.GetSigningOrderRequestOutboxByOrderItem(ctx, itemID) + signingOrderRequests, err := suite.storage.GetSigningOrderRequestOutboxByOrderItem(ctx, orderID, itemID) suite.Require().NoError(err) suite.Require().Len(signingOrderRequests, 1) diff --git a/services/skus/instrumented_datastore.go b/services/skus/instrumented_datastore.go index 1571d2bc5..d6ed36a2e 100644 --- a/services/skus/instrumented_datastore.go +++ b/services/skus/instrumented_datastore.go @@ -353,7 +353,7 @@ func (_d DatastoreWithPrometheus) GetSigningOrderRequestOutboxByOrder(ctx contex } // GetSigningOrderRequestOutboxByOrderItem implements Datastore -func (_d DatastoreWithPrometheus) GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, itemID uuid.UUID) (sa1 []SigningOrderRequestOutbox, err error) { +func (_d DatastoreWithPrometheus) GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, orderID, itemID uuid.UUID) (sa1 []SigningOrderRequestOutbox, err error) { _since := time.Now() defer func() { result := "ok" @@ -363,7 +363,7 @@ func (_d DatastoreWithPrometheus) GetSigningOrderRequestOutboxByOrderItem(ctx co datastoreDurationSummaryVec.WithLabelValues(_d.instanceName, "GetSigningOrderRequestOutboxByOrderItem", result).Observe(time.Since(_since).Seconds()) }() - return _d.base.GetSigningOrderRequestOutboxByOrderItem(ctx, itemID) + return _d.base.GetSigningOrderRequestOutboxByOrderItem(ctx, orderID, itemID) } // GetSigningOrderRequestOutboxByRequestID implements Datastore diff --git a/services/skus/mockdatastore.go b/services/skus/mockdatastore.go index 165d2cdd4..13a1ba768 100644 --- a/services/skus/mockdatastore.go +++ b/services/skus/mockdatastore.go @@ -370,18 +370,18 @@ func (mr *MockDatastoreMockRecorder) GetSigningOrderRequestOutboxByOrder(ctx, or } // GetSigningOrderRequestOutboxByOrderItem mocks base method. -func (m *MockDatastore) GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, itemID go_uuid.UUID) ([]SigningOrderRequestOutbox, error) { +func (m *MockDatastore) GetSigningOrderRequestOutboxByOrderItem(ctx context.Context, orderID, itemID go_uuid.UUID) ([]SigningOrderRequestOutbox, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSigningOrderRequestOutboxByOrderItem", ctx, itemID) + ret := m.ctrl.Call(m, "GetSigningOrderRequestOutboxByOrderItem", ctx, orderID, itemID) ret0, _ := ret[0].([]SigningOrderRequestOutbox) ret1, _ := ret[1].(error) return ret0, ret1 } // GetSigningOrderRequestOutboxByOrderItem indicates an expected call of GetSigningOrderRequestOutboxByOrderItem. -func (mr *MockDatastoreMockRecorder) GetSigningOrderRequestOutboxByOrderItem(ctx, itemID interface{}) *gomock.Call { +func (mr *MockDatastoreMockRecorder) GetSigningOrderRequestOutboxByOrderItem(ctx, orderID, itemID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSigningOrderRequestOutboxByOrderItem", reflect.TypeOf((*MockDatastore)(nil).GetSigningOrderRequestOutboxByOrderItem), ctx, itemID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSigningOrderRequestOutboxByOrderItem", reflect.TypeOf((*MockDatastore)(nil).GetSigningOrderRequestOutboxByOrderItem), ctx, orderID, itemID) } // GetSigningOrderRequestOutboxByRequestID mocks base method.