From 0248ae8a4cf3a32a8bed119195d6dc93ca0f492a Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 11 Mar 2026 12:51:18 +0100 Subject: [PATCH 1/2] Just one function to get items for patron request Both sides. --- broker/patron_request/service/action.go | 29 ++++++-------------- broker/patron_request/service/action_test.go | 6 ++-- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/broker/patron_request/service/action.go b/broker/patron_request/service/action.go index 4454c1da..f99f3dd5 100644 --- a/broker/patron_request/service/action.go +++ b/broker/patron_request/service/action.go @@ -320,25 +320,12 @@ func (a *PatronRequestActionService) sendBorrowingRequest(ctx common.ExtendedCon return actionExecutionResult{status: events.EventStatusSuccess, result: &result, outcome: ActionOutcomeSuccess, pr: pr} } -func (a *PatronRequestActionService) getFirstItem(ctx common.ExtendedContext, pr pr_db.PatronRequest) ([]pr_db.Item, error) { - items, err := a.prRepo.GetItemsByPrId(ctx, pr.ID) - if err != nil { - return nil, err - } - if len(items) == 0 { - return nil, errors.New("no items found for PR ID") - } else if len(items) > 1 { - ctx.Logger().Warn("multiple items found for PR ID, only the first one will be used", "prId", pr.ID, "itemCount", len(items)) - } - return items, nil -} - func (a *PatronRequestActionService) receiveBorrowingRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request) actionExecutionResult { patron := "" if pr.Patron.Valid { patron = pr.Patron.String } - items, err := a.getFirstItem(ctx, pr) + items, err := a.getItems(ctx, pr) if err != nil { status, result := events.LogErrorAndReturnResult(ctx, "receiveBorrowingRequest failed to get items by PR ID", err) return actionExecutionResult{status: status, result: result, outcome: ActionOutcomeFailure, pr: pr} @@ -378,7 +365,7 @@ func (a *PatronRequestActionService) checkoutBorrowingRequest(ctx common.Extende if pr.Patron.Valid { patron = pr.Patron.String } - items, err := a.getFirstItem(ctx, pr) + items, err := a.getItems(ctx, pr) if err != nil { status, result := events.LogErrorAndReturnResult(ctx, "checkoutBorrowingRequest failed to get items by PR ID", err) return actionExecutionResult{status: status, result: result, outcome: ActionOutcomeFailure, pr: pr} @@ -394,7 +381,7 @@ func (a *PatronRequestActionService) checkoutBorrowingRequest(ctx common.Extende } func (a *PatronRequestActionService) checkinBorrowingRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request) actionExecutionResult { - items, err := a.getFirstItem(ctx, pr) + items, err := a.getItems(ctx, pr) if err != nil { status, result := events.LogErrorAndReturnResult(ctx, "checkinBorrowingRequest failed to get items by PR ID", err) return actionExecutionResult{status: status, result: result, outcome: ActionOutcomeFailure, pr: pr} @@ -409,7 +396,7 @@ func (a *PatronRequestActionService) checkinBorrowingRequest(ctx common.Extended } func (a *PatronRequestActionService) shipReturnBorrowingRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request) actionExecutionResult { - items, err := a.getFirstItem(ctx, pr) + items, err := a.getItems(ctx, pr) if err != nil { status, result := events.LogErrorAndReturnResult(ctx, "shipReturnBorrowingRequest failed to get items by PR ID", err) return actionExecutionResult{status: status, result: result, outcome: ActionOutcomeFailure, pr: pr} @@ -560,7 +547,7 @@ func (a *PatronRequestActionService) shipLenderRequest(ctx common.ExtendedContex userId := lmsAdapter.InstitutionalPatron(pr.RequesterSymbol.String) externalReferenceValue := "" - items, err := a.getItemsLender(ctx, pr) + items, err := a.getItems(ctx, pr) if err != nil { status, result := events.LogErrorAndReturnResult(ctx, "no items for shipping in the request", err) return actionExecutionResult{status: status, result: result, outcome: ActionOutcomeFailure, pr: pr} @@ -595,7 +582,7 @@ func encodeItemsNote(items []pr_db.Item) string { } func (a *PatronRequestActionService) markReceivedLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request) actionExecutionResult { - items, err := a.getItemsLender(ctx, pr) + items, err := a.getItems(ctx, pr) if err != nil { status, result := events.LogErrorAndReturnResult(ctx, "no items for check-in in the request", err) return actionExecutionResult{status: status, result: result, outcome: ActionOutcomeFailure, pr: pr} @@ -685,13 +672,13 @@ func (rcw *ResponseCaptureWriter) Header() http.Header { return http.Header{} } -func (a *PatronRequestActionService) getItemsLender(ctx common.ExtendedContext, pr pr_db.PatronRequest) ([]pr_db.Item, error) { +func (a *PatronRequestActionService) getItems(ctx common.ExtendedContext, pr pr_db.PatronRequest) ([]pr_db.Item, error) { items, err := a.prRepo.GetItemsByPrId(ctx, pr.ID) if err != nil { return nil, fmt.Errorf("failed to get items: %w", err) } if len(items) == 0 { - return nil, errors.New("no item found for patron request") + return nil, fmt.Errorf("no items found for patron request") } if len(items) > 1 { ctx.Logger().Warn("multiple items found for patron request, using the first one", "itemCount", len(items)) diff --git a/broker/patron_request/service/action_test.go b/broker/patron_request/service/action_test.go index 91158257..289f7ffa 100644 --- a/broker/patron_request/service/action_test.go +++ b/broker/patron_request/service/action_test.go @@ -217,7 +217,7 @@ func TestHandleInvokeActionReceiveNoItem(t *testing.T) { status, resultData := prAction.handleInvokeAction(appCtx, events.Event{PatronRequestID: patronRequestId, EventData: events.EventData{CommonEventData: events.CommonEventData{Action: &action}}}) assert.Equal(t, events.EventStatusError, status) assert.Equal(t, "receiveBorrowingRequest failed to get items by PR ID", resultData.EventError.Message) - assert.Equal(t, "no items found for PR ID", resultData.EventError.Cause) + assert.Equal(t, "no items found for patron request", resultData.EventError.Cause) } func TestHandleInvokeActionReceiveItemLookupFailure(t *testing.T) { @@ -234,7 +234,7 @@ func TestHandleInvokeActionReceiveItemLookupFailure(t *testing.T) { status, resultData := prAction.handleInvokeAction(appCtx, events.Event{PatronRequestID: patronRequestId, EventData: events.EventData{CommonEventData: events.CommonEventData{Action: &action}}}) assert.Equal(t, events.EventStatusError, status) assert.Equal(t, "receiveBorrowingRequest failed to get items by PR ID", resultData.EventError.Message) - assert.Equal(t, "assert.AnError general error for testing", resultData.EventError.Cause) + assert.Equal(t, "failed to get items: assert.AnError general error for testing", resultData.EventError.Cause) } func TestHandleInvokeActionCheckOutOK(t *testing.T) { @@ -689,7 +689,7 @@ func TestHandleInvokeLenderActionShipGetItemsByIdEmpty(t *testing.T) { assert.Equal(t, events.EventStatusError, status) assert.Equal(t, "no items for shipping in the request", resultData.EventError.Message) - assert.Equal(t, "no item found for patron request", resultData.EventError.Cause) + assert.Equal(t, "no items found for patron request", resultData.EventError.Cause) } func TestHandleInvokeLenderActionShipLmsFailed(t *testing.T) { From 8e39cbdd4f26cb5061d273c6b7f5f5f5af05d007 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 11 Mar 2026 13:18:44 +0100 Subject: [PATCH 2/2] Update broker/patron_request/service/action.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- broker/patron_request/service/action.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/broker/patron_request/service/action.go b/broker/patron_request/service/action.go index f99f3dd5..3a63a019 100644 --- a/broker/patron_request/service/action.go +++ b/broker/patron_request/service/action.go @@ -678,7 +678,7 @@ func (a *PatronRequestActionService) getItems(ctx common.ExtendedContext, pr pr_ return nil, fmt.Errorf("failed to get items: %w", err) } if len(items) == 0 { - return nil, fmt.Errorf("no items found for patron request") + return nil, errors.New("no items found for patron request") } if len(items) > 1 { ctx.Logger().Warn("multiple items found for patron request, using the first one", "itemCount", len(items))