Skip to content

Commit fe98b2d

Browse files
CROSSLINK-210 Add search criteria
1 parent 80dd56f commit fe98b2d

11 files changed

Lines changed: 116 additions & 25 deletions

File tree

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
ALTER TABLE patron_request DROP COLUMN needs_attention;
1+
ALTER TABLE patron_request DROP COLUMN needs_attention;
2+
3+
DROP VIEW patron_request_search_view ;
Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,24 @@
1-
ALTER TABLE patron_request ADD COLUMN needs_attention BOOLEAN NOT NULL DEFAULT false;
1+
ALTER TABLE patron_request ADD COLUMN needs_attention BOOLEAN NOT NULL DEFAULT false;
2+
3+
CREATE OR REPLACE VIEW patron_request_search_view AS
4+
SELECT
5+
pr.*,
6+
EXISTS (
7+
SELECT 1
8+
FROM notification n
9+
WHERE n.pr_id = pr.id
10+
) AS has_notification,
11+
EXISTS (
12+
SELECT 1
13+
FROM notification n
14+
WHERE n.pr_id = pr.id and cost is not null
15+
) AS has_cost,
16+
EXISTS (
17+
SELECT 1
18+
FROM notification n
19+
WHERE n.pr_id = pr.id and acknowledged_at is null
20+
) AS has_unreaded_not,
21+
pr.ill_request -> 'serviceInfo' ->> 'serviceType' AS service_type,
22+
pr.ill_request -> 'serviceInfo' -> 'serviceLevel' ->> '#text' AS service_level,
23+
(pr.ill_request -> 'serviceInfo' ->> 'needBeforeDate')::timestamptz AS needed_at
24+
FROM patron_request pr;

broker/oapi/open-api.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,11 @@ paths:
11191119
/patron_requests:
11201120
get:
11211121
summary: Retrieve patron requests
1122+
description: |
1123+
Use this endpoint to retrieve patron requests.
1124+
Query parameter cql can be used to filter the results.
1125+
With cql you can use these fields state, side, requester_symbol, supplier_symbol, needs_attention,
1126+
has_notification, has_cost, has_unreaded_notification, service_type, service_level, created_at, needed_at.
11221127
tags:
11231128
- patron-requests-api
11241129
parameters:

broker/patron_request/api/api-handler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,7 @@ func (a *PatronRequestApiHandler) toDbPatronRequest(ctx common.ExtendedContext,
594594
SupplierSymbol: getDbText(request.SupplierSymbol),
595595
IllRequest: illRequest,
596596
Tenant: getDbText(tenant),
597+
RequesterReqID: getDbText(&id),
597598
}, nil
598599
}
599600

broker/patron_request/db/prcql.go

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,30 @@ func handlePatronRequestsQuery(cqlString string, noBaseArgs int) (pgcql.Query, e
3636
f = pgcql.NewFieldString().WithExact()
3737
def.AddField("supplier_symbol", f)
3838

39+
f = pgcql.NewFieldString().WithExact()
40+
def.AddField("needs_attention", f)
41+
42+
f = pgcql.NewFieldString().WithExact()
43+
def.AddField("has_notification", f)
44+
45+
f = pgcql.NewFieldString().WithExact()
46+
def.AddField("has_cost", f)
47+
48+
f = pgcql.NewFieldString().WithExact()
49+
def.AddField("has_unreaded_notification", f)
50+
51+
f = pgcql.NewFieldString().WithExact()
52+
def.AddField("service_type", f)
53+
54+
f = pgcql.NewFieldString().WithExact()
55+
def.AddField("service_level", f)
56+
57+
nf := pgcql.NewFieldDate().WithColumn("timestamp")
58+
def.AddField("created_at", nf)
59+
60+
nf = pgcql.NewFieldDate()
61+
def.AddField("needed_at", nf)
62+
3963
var parser cql.Parser
4064
query, err := parser.Parse(cqlString)
4165
if err != nil {
@@ -49,7 +73,7 @@ func (q *Queries) ListPatronRequestsCql(ctx context.Context, db DBTX, arg ListPa
4973
if cqlString == nil {
5074
return q.ListPatronRequests(ctx, db, arg)
5175
}
52-
noBaseArgs := 2 // weh have two base arguments: limit and offset
76+
noBaseArgs := 2 // we have two base arguments: limit and offset
5377
res, err := handlePatronRequestsQuery(*cqlString, noBaseArgs)
5478
if err != nil {
5579
return nil, err
@@ -76,17 +100,17 @@ func (q *Queries) ListPatronRequestsCql(ctx context.Context, db DBTX, arg ListPa
76100
for rows.Next() {
77101
var i ListPatronRequestsRow
78102
if err := rows.Scan(
79-
&i.PatronRequest.ID,
80-
&i.PatronRequest.Timestamp,
81-
&i.PatronRequest.IllRequest,
82-
&i.PatronRequest.State,
83-
&i.PatronRequest.Side,
84-
&i.PatronRequest.Patron,
85-
&i.PatronRequest.RequesterSymbol,
86-
&i.PatronRequest.SupplierSymbol,
87-
&i.PatronRequest.Tenant,
88-
&i.PatronRequest.RequesterReqID,
89-
&i.PatronRequest.NeedsAttention,
103+
&i.ID,
104+
&i.Timestamp,
105+
&i.IllRequest,
106+
&i.State,
107+
&i.Side,
108+
&i.Patron,
109+
&i.RequesterSymbol,
110+
&i.SupplierSymbol,
111+
&i.Tenant,
112+
&i.RequesterReqID,
113+
&i.NeedsAttention,
90114
&i.FullCount,
91115
); err != nil {
92116
return nil, err

broker/patron_request/db/prrepo.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type PrRepo interface {
1515
UpdatePatronRequest(ctx common.ExtendedContext, params UpdatePatronRequestParams) (PatronRequest, error)
1616
CreatePatronRequest(ctx common.ExtendedContext, params CreatePatronRequestParams) (PatronRequest, error)
1717
DeletePatronRequest(ctx common.ExtendedContext, id string) error
18-
GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.ExtendedContext, supplierSymbol string, requesterReId string) (PatronRequest, error)
18+
GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.ExtendedContext, supplierSymbol string, requesterReId string, side PatronRequestSide) (PatronRequest, error)
1919
GetNextHrid(ctx common.ExtendedContext, prefix string) (string, error)
2020
SaveItem(ctx common.ExtendedContext, params SaveItemParams) (Item, error)
2121
GetItemById(ctx common.ExtendedContext, id string) (Item, error)
@@ -56,7 +56,19 @@ func (r *PgPrRepo) ListPatronRequests(ctx common.ExtendedContext, params ListPat
5656
fullCount = rows[0].FullCount
5757
for _, r := range rows {
5858
fullCount = r.FullCount
59-
list = append(list, r.PatronRequest)
59+
list = append(list, PatronRequest{
60+
ID: r.ID,
61+
Timestamp: r.Timestamp,
62+
IllRequest: r.IllRequest,
63+
State: PatronRequestState(r.State),
64+
Side: PatronRequestSide(r.Side),
65+
Patron: r.Patron,
66+
RequesterSymbol: r.RequesterSymbol,
67+
SupplierSymbol: r.SupplierSymbol,
68+
Tenant: r.Tenant,
69+
RequesterReqID: r.RequesterReqID,
70+
NeedsAttention: r.NeedsAttention,
71+
})
6072
}
6173
} else {
6274
params.Limit = 1
@@ -83,7 +95,7 @@ func (r *PgPrRepo) DeletePatronRequest(ctx common.ExtendedContext, id string) er
8395
return r.queries.DeletePatronRequest(ctx, r.GetConnOrTx(), id)
8496
}
8597

86-
func (r *PgPrRepo) GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.ExtendedContext, supplierSymbol string, requesterReId string) (PatronRequest, error) {
98+
func (r *PgPrRepo) GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.ExtendedContext, supplierSymbol string, requesterReId string, side PatronRequestSide) (PatronRequest, error) {
8799
row, err := r.queries.GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx, r.GetConnOrTx(), GetPatronRequestBySupplierSymbolAndRequesterReqIdParams{
88100
SupplierSymbol: pgtype.Text{
89101
String: supplierSymbol,
@@ -93,6 +105,7 @@ func (r *PgPrRepo) GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.
93105
String: requesterReId,
94106
Valid: true,
95107
},
108+
Side: side,
96109
})
97110
return row.PatronRequest, err
98111
}

broker/patron_request/service/action_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ func (r *MockPrRepo) CreatePatronRequest(ctx common.ExtendedContext, params pr_d
731731
return pr_db.PatronRequest(params), nil
732732
}
733733

734-
func (r *MockPrRepo) GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.ExtendedContext, symbol string, requesterReqId string) (pr_db.PatronRequest, error) {
734+
func (r *MockPrRepo) GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx common.ExtendedContext, symbol string, requesterReqId string, side pr_db.PatronRequestSide) (pr_db.PatronRequest, error) {
735735
args := r.Called(symbol, requesterReqId)
736736
return args.Get(0).(pr_db.PatronRequest), args.Error(1)
737737
}

broker/patron_request/service/message-handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ func (m *PatronRequestMessageHandler) getPatronRequest(ctx common.ExtendedContex
123123
return m.prRepo.GetPatronRequestById(ctx, msg.RequestingAgencyMessage.Header.SupplyingAgencyRequestId)
124124
} else {
125125
symbol := msg.RequestingAgencyMessage.Header.SupplyingAgencyId.AgencyIdType.Text + ":" + msg.RequestingAgencyMessage.Header.SupplyingAgencyId.AgencyIdValue
126-
return m.prRepo.GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx, symbol, msg.RequestingAgencyMessage.Header.RequestingAgencyRequestId)
126+
return m.prRepo.GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx, symbol, msg.RequestingAgencyMessage.Header.RequestingAgencyRequestId, SideLending)
127127
}
128128
} else if msg.Request != nil {
129129
return m.prRepo.GetPatronRequestById(ctx, msg.Request.Header.RequestingAgencyRequestId)
@@ -292,7 +292,7 @@ func (m *PatronRequestMessageHandler) handleRequestMessage(ctx common.ExtendedCo
292292
}
293293
supplierSymbol := request.Header.SupplyingAgencyId.AgencyIdType.Text + ":" + request.Header.SupplyingAgencyId.AgencyIdValue
294294
requesterSymbol := request.Header.RequestingAgencyId.AgencyIdType.Text + ":" + request.Header.RequestingAgencyId.AgencyIdValue
295-
_, err := m.prRepo.GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx, supplierSymbol, raRequestId)
295+
_, err := m.prRepo.GetPatronRequestBySupplierSymbolAndRequesterReqId(ctx, supplierSymbol, raRequestId, SideLending)
296296
if err != nil {
297297
if !errors.Is(err, pgx.ErrNoRows) {
298298
return createRequestResponse(request, iso18626.TypeMessageStatusERROR, &iso18626.ErrorData{

broker/sqlc/pr_query.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ WHERE id = $1
55
LIMIT 1;
66

77
-- name: ListPatronRequests :many
8-
SELECT sqlc.embed(patron_request), COUNT(*) OVER () as full_count
9-
FROM patron_request
8+
SELECT id, timestamp, ill_request, state, side, patron, requester_symbol, supplier_symbol, tenant, requester_req_id, needs_attention, COUNT(*) OVER () as full_count
9+
FROM patron_request_search_view
1010
ORDER BY timestamp
1111
LIMIT $1 OFFSET $2;
1212

@@ -39,7 +39,7 @@ WHERE id = $1;
3939
-- params: supplier_symbol string, requester_req_id string
4040
SELECT sqlc.embed(patron_request)
4141
FROM patron_request
42-
WHERE supplier_symbol = $1 AND requester_req_id = $2
42+
WHERE supplier_symbol = $1 AND requester_req_id = $2 AND side = $3
4343
LIMIT 1;
4444

4545
-- name: GetNextHrid :one

broker/sqlc/pr_schema.sql

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,26 @@ CREATE TABLE notification
4646
created_at TIMESTAMP NOT NULL DEFAULT now(),
4747
acknowledged_at TIMESTAMP
4848
);
49+
50+
CREATE OR REPLACE VIEW patron_request_search_view AS
51+
SELECT
52+
pr.*,
53+
EXISTS (
54+
SELECT 1
55+
FROM notification n
56+
WHERE n.pr_id = pr.id
57+
) AS has_notification,
58+
EXISTS (
59+
SELECT 1
60+
FROM notification n
61+
WHERE n.pr_id = pr.id and cost is not null
62+
) AS has_cost,
63+
EXISTS (
64+
SELECT 1
65+
FROM notification n
66+
WHERE n.pr_id = pr.id and acknowledged_at is null
67+
) AS has_unreaded_not,
68+
pr.ill_request -> 'serviceInfo' ->> 'serviceType' AS service_type,
69+
pr.ill_request -> 'serviceInfo' -> 'serviceLevel' ->> '#text' AS service_level,
70+
(pr.ill_request -> 'serviceInfo' ->> 'needBeforeDate')::timestamptz AS needed_at
71+
FROM patron_request pr;

0 commit comments

Comments
 (0)