Skip to content

Commit 4911f54

Browse files
Merge pull request #30 from KainosSoftwareLtd/kainos-develop
merge kainos-master with kainos-develop
2 parents c3b97fe + 39a4d52 commit 4911f54

File tree

2 files changed

+74
-9
lines changed

2 files changed

+74
-9
lines changed

src/fhir/search_helpers.coffee

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ exports.search_links = (query, expr, total)->
1414
base_url = base_url + "&_page=0"
1515

1616
requested_count = expr.count
17-
requested_page = expr.page
17+
requested_page = expr.page ? 0
1818

1919
res.push({relation: 'self', url: base_url})
2020

21-
if requested_count && requested_count < total
21+
if requested_count && requested_count * (requested_page + 1) < total
2222
next_url = base_url.replace /_page=\d+/, -> "_page=#{requested_page + 1}"
2323
res.push({relation: 'next', url: next_url})
2424

@@ -27,11 +27,7 @@ exports.search_links = (query, expr, total)->
2727
res.push({relation: 'previous', url: next_url})
2828

2929
if requested_count
30-
last_page = if requested_count < total
31-
Math.floor(total / requested_count)
32-
else
33-
requested_page
34-
30+
last_page = Math.max(0, Math.ceil(total / requested_count) - 1)
3531
last_url = base_url.replace /_page=\d+/, -> "_page=#{last_page}"
3632
res.push({relation: 'last', url: last_url})
3733

test/fhir/search/pagination_search.yaml

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ queries:
6262
- path: ['link', 2, 'url']
6363
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=0&_count=1"
6464
- path: ['link', 3, 'url']
65-
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=3&_count=1"
65+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=2&_count=1"
6666

6767
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nicola&_sort=patient&_page=1&_count=1&_totalMethod=exact'}
6868
total: 3
@@ -76,10 +76,79 @@ queries:
7676
- path: ['link', 2, 'url']
7777
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=0&_count=1&_totalMethod=exact"
7878
- path: ['link', 3, 'url']
79-
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=3&_count=1&_totalMethod=exact"
79+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=2&_count=1&_totalMethod=exact"
8080

8181
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nicola&_sort=patient&_page=1&_count=1&_totalMethod=no'}
8282
total: _undefined
8383
probes:
8484
- path: ['link']
8585
result: '_undefined'
86+
87+
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nicola&_sort=patient&_count=3'}
88+
total: 3
89+
probes:
90+
- path: ['entry', 'length']
91+
result: 3
92+
- path: ['link', 0, 'url']
93+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_count=3&_page=0"
94+
- path: ['link', 1, 'url']
95+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_count=3&_page=0"
96+
- path: ['link', 2, 'url']
97+
98+
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nicola&_sort=patient&_page=0&_count=3'}
99+
total: 3
100+
probes:
101+
- path: ['entry', 'length']
102+
result: 3
103+
- path: ['link', 0, 'url']
104+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=0&_count=3"
105+
- path: ['link', 1, 'url']
106+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=0&_count=3"
107+
- path: ['link', 2, 'url']
108+
109+
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nicola&_sort=patient&_page=2&_count=3'}
110+
total: 3
111+
probes:
112+
- path: ['entry', 'length']
113+
result: 0
114+
- path: ['link', 0, 'url']
115+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=2&_count=3"
116+
- path: ['link', 1, 'url']
117+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=1&_count=3"
118+
- path: ['link', 2, 'url']
119+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=0&_count=3"
120+
- path: ['link', 3, 'url']
121+
122+
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nicola&_sort=patient&_page=1&_count=2'}
123+
total: 3
124+
probes:
125+
- path: ['entry', 'length']
126+
result: 1
127+
- path: ['link', 0, 'relation']
128+
result: "self"
129+
- path: ['link', 0, 'url']
130+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=1&_count=2"
131+
- path: ['link', 1, 'relation']
132+
result: "previous"
133+
- path: ['link', 1, 'url']
134+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=0&_count=2"
135+
- path: ['link', 2, 'relation']
136+
result: "last"
137+
- path: ['link', 2, 'url']
138+
result: "/Encounter?patient=Patient/nicola&_sort=patient&_page=1&_count=2"
139+
- path: ['link', 3, 'url']
140+
141+
- query: {resourceType: 'Encounter', queryString: 'patient=Patient/nonexistent&_sort=patient&_page=0&_count=3'}
142+
total: 0
143+
probes:
144+
- path: ['entry', 'length']
145+
result: 0
146+
- path: ['link', 0, 'relation']
147+
result: "self"
148+
- path: ['link', 0, 'url']
149+
result: "/Encounter?patient=Patient/nonexistent&_sort=patient&_page=0&_count=3"
150+
- path: ['link', 1, 'relation']
151+
result: "last"
152+
- path: ['link', 1, 'url']
153+
result: "/Encounter?patient=Patient/nonexistent&_sort=patient&_page=0&_count=3"
154+
- path: ['link', 2, 'url']

0 commit comments

Comments
 (0)