Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
6664a78
Begin
adamdickmeiss May 11, 2026
622156d
Merge remote-tracking branch 'origin/main' into CROSSLINK-277-GVI
adamdickmeiss May 11, 2026
3635b88
More
adamdickmeiss May 11, 2026
b6ee75e
Pass ServiceType
adamdickmeiss May 11, 2026
170dd75
Fix up test
adamdickmeiss May 11, 2026
3c17186
Check type
adamdickmeiss May 11, 2026
9cdd515
Merge remote-tracking branch 'origin/main' into CROSSLINK-277-GVI
adamdickmeiss May 11, 2026
7750ab5
MARC-21plus-1 test
adamdickmeiss May 12, 2026
c546237
Merge remote-tracking branch 'origin/main' into CROSSLINK-277-GVI
adamdickmeiss May 12, 2026
f288983
No ctx for NewMetaproxyAvailabilityAdapter, NewZoomAvailabilityAdapter
adamdickmeiss May 12, 2026
2fa4415
begin consortia stuff
adamdickmeiss May 12, 2026
9cf0b2f
GVI holdings back
adamdickmeiss May 12, 2026
b8c3c3a
Add GVI test (which should use mock)
adamdickmeiss May 12, 2026
b8f05f4
gvi holdings test mock
adamdickmeiss May 12, 2026
f96cb6e
availability, adapter -> holdings package
adamdickmeiss May 12, 2026
79bafd0
Ensure prefix ISIL: for symbols in marc21plus1 parser
adamdickmeiss May 12, 2026
884f620
CONSORTIA_SYMBOL
adamdickmeiss May 12, 2026
d74784f
Missing file
adamdickmeiss May 12, 2026
dcc0f9b
directory.Cql
adamdickmeiss May 12, 2026
033f25f
Guard against nil
adamdickmeiss May 12, 2026
2c1a8a7
Guard against nil Query
adamdickmeiss May 12, 2026
48b37e2
Merge remote-tracking branch 'origin/main' into CROSSLINK-277-GVI
adamdickmeiss May 12, 2026
7a1ab27
default is pqf
adamdickmeiss May 12, 2026
25ffa52
Remove useless source
adamdickmeiss May 12, 2026
984e7de
query.Close()
adamdickmeiss May 12, 2026
c0074b7
Returned non-hitting cql/pqf query
adamdickmeiss May 12, 2026
12adceb
Rename
adamdickmeiss May 13, 2026
f2cf134
Returns LookupQueryBuilder
adamdickmeiss May 13, 2026
fbe224b
Revert go.work.sum change
adamdickmeiss May 13, 2026
900ccd9
Merge branch 'main' into CROSSLINK-277-GVI
adamdickmeiss May 13, 2026
b09ac58
Test NewCqlQuery
adamdickmeiss May 13, 2026
5dea81a
QueryBuilderGen testing
adamdickmeiss May 13, 2026
15213dd
Tweak error messages
adamdickmeiss May 13, 2026
7428e29
Default per field
adamdickmeiss May 13, 2026
22ae998
HOLDINGS_FORMAT
adamdickmeiss May 13, 2026
56ad913
move test
adamdickmeiss May 13, 2026
4aae3d7
Include query type in error message
adamdickmeiss May 13, 2026
cae580d
Merge branch 'main' into CROSSLINK-277-GVI
adamdickmeiss May 13, 2026
142d043
Tune error messages
adamdickmeiss May 13, 2026
f9234d3
Holdings when CQL query used
adamdickmeiss May 13, 2026
6c90184
Rename
adamdickmeiss May 13, 2026
39fdf53
Merge remote-tracking branch 'origin/main' into CROSSLINK-277-GVI
adamdickmeiss May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion broker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,12 @@ Configuration is provided via environment variables:
| `CLIENT_DELAY` | Delay duration for outgoing ISO18626 messages | `0ms` |
| `SHUTDOWN_DELAY` | Delay duration for graceful shutdown (in-flight connections) | `15s` |
| `MAX_MESSAGE_SIZE` | Max accepted ISO18626 message size | `100KB` |
| `HOLDINGS_ADAPTER` | Holdings lookup method: `mock` or `sru` | `mock` |
| `HOLDINGS_ADAPTER` | Holdings lookup method: `mock`, `sru` or `consortia` | `mock` |
| `HOLDINGS_SRU_URL` | Comma separated list of URLs when `HOLDINGS_ADAPTER` is `sru` | `http://localhost:8081/sru` |
| `HOLDINGS_ISXN_LOOKUP` | Whether to use ISBN/ISSN lookup for `sru` method | `false` |
| `HOLDINGS_FORMAT` | Parser for SRU holdings: `reservoir`, `marc`, `opac` or `MARC-21plus-1` | `reservoir` |
| `CONSORTIA_SYMBOL` | Designates peer for which configuration is used for consortia. At this time, it is | (empty value) |
| | used when `HOLDINGS_ADAPTER` = `consortia`. | |
| `DIRECTORY_ADAPTER` | Directory lookup method: `mock` or `api` | `mock` |
| `DIRECTORY_API_URL` | Comma separated list of URLs when `DIRECTORY_ADAPTER` is `api` | `http://localhost:8081/directory/entries` |
| `AVAILABILITY_ADAPTER` | Availability adapter: `mock` , `zoom`, `metaproxy`. | `zoom` |
Expand Down
42 changes: 0 additions & 42 deletions broker/adapter/create_holdings.go

This file was deleted.

106 changes: 0 additions & 106 deletions broker/adapter/query_builder_pqf.go

This file was deleted.

17 changes: 10 additions & 7 deletions broker/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"syscall"
"time"

"github.com/indexdata/crosslink/broker/availability"
"github.com/indexdata/crosslink/broker/holdings"
prapi "github.com/indexdata/crosslink/broker/patron_request/api"
pr_db "github.com/indexdata/crosslink/broker/patron_request/db"
"github.com/indexdata/crosslink/broker/patron_request/proapi"
Expand Down Expand Up @@ -64,6 +64,8 @@ var LOG_LEVEL = utils.GetEnv("LOG_LEVEL", "INFO")
var HOLDINGS_ADAPTER = utils.GetEnv("HOLDINGS_ADAPTER", "mock")
var HOLDINGS_SRU_URL = common.GetEnvWithDeprecated("HOLDINGS_SRU_URL", "SRU_URL", "http://localhost:8081/sru")
var HOLDINGS_ISXN_LOOKUP, _ = utils.GetEnvBool("HOLDINGS_ISXN_LOOKUP", false)
var HOLDINGS_FORMAT = utils.GetEnv("HOLDINGS_FORMAT", "reservoir")
var CONSORTIA_SYMBOL = utils.GetEnv("CONSORTIA_SYMBOL", "")
var DIRECTORY_ADAPTER = utils.GetEnv("DIRECTORY_ADAPTER", "mock")
var AVAILABILITY_ADAPTER = utils.GetEnv("AVAILABILITY_ADAPTER", "zoom")
var DIRECTORY_API_URL = utils.GetEnv("DIRECTORY_API_URL", "http://localhost:8081/directory/entries")
Expand Down Expand Up @@ -132,10 +134,11 @@ func configLog() slog.Handler {

func Init(ctx context.Context) (Context, error) {
appCtx.Logger().Info("starting " + vcs.GetSignature())
holdingsAdapter, err := adapter.CreateHoldingsLookupAdapter(map[string]any{
adapter.HoldingsAdapter: HOLDINGS_ADAPTER,
adapter.HoldingsSruURL: HOLDINGS_SRU_URL,
adapter.HoldingsIsxnLookup: HOLDINGS_ISXN_LOOKUP,
holdingsAdapter, err := holdings.CreateHoldingsLookupShared(map[string]any{
holdings.HoldingsAdapter: HOLDINGS_ADAPTER,
holdings.HoldingsSruURL: HOLDINGS_SRU_URL,
holdings.HoldingsIsxnLookup: HOLDINGS_ISXN_LOOKUP,
holdings.HoldingsFormat: HOLDINGS_FORMAT,
})
if err != nil {
return Context{}, err
Expand Down Expand Up @@ -174,11 +177,11 @@ func Init(ctx context.Context) (Context, error) {
prMessageHandler := prservice.CreatePatronRequestMessageHandler(prRepo, eventRepo, illRepo, eventBus)
iso18626Handler := handler.CreateIso18626Handler(eventBus, eventRepo, illRepo, dirAdapter)
lmsCreator := lms.NewLmsCreator(illRepo, dirAdapter)
availabilityCreator := availability.NewAvailabilityCreator(AVAILABILITY_ADAPTER, METAPROXY_URL)
availabilityCreator := holdings.NewAvailabilityCreator(AVAILABILITY_ADAPTER, METAPROXY_URL)
prActionService := prservice.CreatePatronRequestActionService(prRepo, eventBus, &iso18626Handler, lmsCreator)
prMessageHandler.SetAutoActionRunner(prActionService)
iso18626Client := client.CreateIso18626Client(eventBus, illRepo, prMessageHandler, MAX_MESSAGE_SIZE, delay)
supplierLocator := service.CreateSupplierLocator(eventBus, illRepo, dirAdapter, holdingsAdapter, availabilityCreator)
supplierLocator := service.CreateSupplierLocator(eventBus, illRepo, dirAdapter, holdingsAdapter, availabilityCreator, CONSORTIA_SYMBOL)
workflowManager := service.CreateWorkflowManager(eventBus, illRepo, service.WorkflowConfig{})
tenantResolver := tenant.NewResolver().WithIllRepo(illRepo).WithLookupAdapter(dirAdapter).WithTenantToSymbol(TENANT_TO_SYMBOL)
apiHandler := api.NewApiHandler(eventRepo, illRepo, *tenantResolver, API_PAGE_SIZE)
Expand Down
11 changes: 0 additions & 11 deletions broker/availability/availability_creator.go

This file was deleted.

24 changes: 0 additions & 24 deletions broker/availability/availability_metaproxy.go

This file was deleted.

31 changes: 0 additions & 31 deletions broker/availability/availability_sru.go

This file was deleted.

19 changes: 0 additions & 19 deletions broker/availability/availability_zoom_nocgo.go

This file was deleted.

22 changes: 22 additions & 0 deletions broker/holdings/adapter_metaproxy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package holdings

import (
"net/http"

"github.com/indexdata/crosslink/directory"
)

type MetaproxyAvailabilityAdapter struct {
holdingsLookupAdapter LookupAdapter
}

func NewMetaproxyAvailabilityAdapter(config directory.ZoomConfig, metaproxyUrl string, queryBuilder LookupQueryBuilder, holdingsParser HoldingsParser) (LookupAdapter, error) {
a := &MetaproxyAvailabilityAdapter{
holdingsLookupAdapter: CreateSruHoldingsLookupAdapter(http.DefaultClient, []string{metaproxyUrl}, config.Address, queryBuilder, holdingsParser, "marcxml"),
}
return a, nil
}

func (a *MetaproxyAvailabilityAdapter) Lookup(params LookupParams) ([]Holding, string, error) {
return a.holdingsLookupAdapter.Lookup(params)
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
package availability
package holdings

import (
"fmt"
"strings"

"github.com/indexdata/crosslink/broker/adapter"
"github.com/indexdata/crosslink/directory"
)

type MockAvailabilityAdapter struct {
Err error
Holdings []adapter.Holding
Holdings []Holding
}

func NewMockAvailabilityAdapter(config directory.AvailabilityConfig) (adapter.LookupAdapter, error) {
if config.Z3950 != nil && config.Z3950.Options != nil {
options := *config.Z3950.Options
func NewMockAvailabilityAdapter(config directory.AvailabilityConfig) (LookupAdapter, error) {
if config.Zoom != nil && config.Zoom.Options != nil {
options := *config.Zoom.Options
// For testing purposes, we can use the presence of "adapter-error" in options to trigger an error response
if val, ok := options["adapter-error"]; ok && strings.ToLower(val) == "true" {
return nil, fmt.Errorf("mock error triggered by config")
Expand All @@ -28,7 +27,7 @@ func NewMockAvailabilityAdapter(config directory.AvailabilityConfig) (adapter.Lo
}
if val, ok := options["location"]; ok {
return &MockAvailabilityAdapter{
Holdings: []adapter.Holding{
Holdings: []Holding{
{
Location: val,
},
Expand All @@ -39,7 +38,7 @@ func NewMockAvailabilityAdapter(config directory.AvailabilityConfig) (adapter.Lo
return &MockAvailabilityAdapter{}, nil
}

func (a *MockAvailabilityAdapter) Lookup(params adapter.LookupParams) ([]adapter.Holding, string, error) {
func (a *MockAvailabilityAdapter) Lookup(params LookupParams) ([]Holding, string, error) {
if a.Err != nil {
return nil, "", a.Err
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package adapter
package holdings

import (
"errors"
Expand All @@ -10,6 +10,7 @@ import (
type MockHoldingsLookupAdapter struct {
}

// the original mock holdings adapter that we used for shared index testing
func (m *MockHoldingsLookupAdapter) Lookup(params LookupParams) ([]Holding, string, error) {
ids := strings.Split(params.Identifier, ";")
i := 1
Expand Down
Loading
Loading