Skip to content

Commit 4fa6863

Browse files
authored
SIMSBIOHUB-893: Add Default Pagination & Increase Max Limit (#348)
* default pagination * cleanup * fix tests * remove unnecessary assertion * remove redundant ensureCompletePaginationOptions calls * remove ensurePagination from makePagiationResponse * change pagination max to 200
1 parent 263efd7 commit 4fa6863

File tree

15 files changed

+102
-127
lines changed

15 files changed

+102
-127
lines changed

api/src/openapi/schemas/pagination.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ export const paginationRequestQueryParamSchema: OpenAPIV3.ParameterObject[] = [
1212
schema: {
1313
type: 'integer',
1414
minimum: 1,
15-
description: 'The current page number to be fetched'
15+
default: 1,
16+
description: 'The current page number to be fetched. Defaults to 1 when omitted.'
1617
}
1718
},
1819
{
@@ -22,8 +23,9 @@ export const paginationRequestQueryParamSchema: OpenAPIV3.ParameterObject[] = [
2223
schema: {
2324
type: 'integer',
2425
minimum: 1,
25-
maximum: 100,
26-
description: 'The number of records to show per page'
26+
maximum: 200,
27+
default: 25,
28+
description: 'The number of records to show per page. Defaults to 25 when omitted.'
2729
}
2830
},
2931
{
@@ -63,7 +65,7 @@ export const paginationRequestBodySchema: OpenAPIV3.SchemaObject = {
6365
limit: {
6466
type: 'integer',
6567
minimum: 1,
66-
maximum: 100,
68+
maximum: 200,
6769
default: 25,
6870
description: 'The number of records to return per page'
6971
},

api/src/paths/administrative/policies/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ import {
1313
import { authorizeRequestHandler } from '../../../request-handlers/security/authorization';
1414
import { PolicyService } from '../../../services/access-policy/policy-service';
1515
import { getLogger } from '../../../utils/logger';
16-
import {
17-
ensureCompletePaginationOptions,
18-
makePaginationOptionsFromRequest,
19-
makePaginationResponse
20-
} from '../../../utils/pagination';
16+
import { makePaginationOptionsFromRequest, makePaginationResponse } from '../../../utils/pagination';
2117

2218
const defaultLog = getLogger('paths/administrative/policies');
2319

@@ -84,7 +80,7 @@ export function getPolicies(): RequestHandler {
8480
const filters = { search };
8581
const pagination = makePaginationOptionsFromRequest(req);
8682
const [policies, count] = await Promise.all([
87-
policyService.getPoliciesWithStatements(filters, ensureCompletePaginationOptions(pagination)),
83+
policyService.getPoliciesWithStatements(filters, pagination),
8884
policyService.getPoliciesCount(filters)
8985
]);
9086

api/src/paths/administrative/team-policies/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ import {
1313
import { authorizeRequestHandler } from '../../../request-handlers/security/authorization';
1414
import { TeamPolicyService } from '../../../services/access-policy/team-policy-service';
1515
import { getLogger } from '../../../utils/logger';
16-
import {
17-
ensureCompletePaginationOptions,
18-
makePaginationOptionsFromRequest,
19-
makePaginationResponse
20-
} from '../../../utils/pagination';
16+
import { makePaginationOptionsFromRequest, makePaginationResponse } from '../../../utils/pagination';
2117

2218
const defaultLog = getLogger('paths/administrative/team-policies');
2319

@@ -83,7 +79,7 @@ export function getTeamPolicies(): RequestHandler {
8379
const filters = { search };
8480
const pagination = makePaginationOptionsFromRequest(req);
8581
const [teamPolicies, count] = await Promise.all([
86-
teamPolicyService.getAllTeamPolicies(filters, ensureCompletePaginationOptions(pagination)),
82+
teamPolicyService.getAllTeamPolicies(filters, pagination),
8783
teamPolicyService.getAllTeamPoliciesCount(filters)
8884
]);
8985

api/src/paths/administrative/teams/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@ import { CreateTeamRequestSchema, TeamSchema, TeamsListResponseSchema } from '..
99
import { authorizeRequestHandler } from '../../../request-handlers/security/authorization';
1010
import { TeamService } from '../../../services/access-policy/team-service';
1111
import { getLogger } from '../../../utils/logger';
12-
import {
13-
ensureCompletePaginationOptions,
14-
makePaginationOptionsFromRequest,
15-
makePaginationResponse
16-
} from '../../../utils/pagination';
12+
import { makePaginationOptionsFromRequest, makePaginationResponse } from '../../../utils/pagination';
1713

1814
const defaultLog = getLogger('paths/administrative/teams');
1915

@@ -74,7 +70,7 @@ export function getTeams(): RequestHandler {
7470
const pagination = makePaginationOptionsFromRequest(req);
7571

7672
const [teams, count] = await Promise.all([
77-
teamService.getTeams(filters, ensureCompletePaginationOptions(pagination)),
73+
teamService.getTeams(filters, pagination),
7874
teamService.getTeamsCount(filters)
7975
]);
8076

api/src/paths/administrative/teams/{teamId}/member/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ import {
1313
import { authorizeRequestHandler } from '../../../../../request-handlers/security/authorization';
1414
import { TeamMemberService } from '../../../../../services/access-policy/team-member-service';
1515
import { getLogger } from '../../../../../utils/logger';
16-
import {
17-
ensureCompletePaginationOptions,
18-
makePaginationOptionsFromRequest,
19-
makePaginationResponse
20-
} from '../../../../../utils/pagination';
16+
import { makePaginationOptionsFromRequest, makePaginationResponse } from '../../../../../utils/pagination';
2117

2218
const defaultLog = getLogger('paths/administrative/teams/{teamId}/member');
2319

@@ -77,7 +73,7 @@ export function getTeamMembers(): RequestHandler {
7773
const teamMemberService = new TeamMemberService(connection);
7874

7975
const [members, count] = await Promise.all([
80-
teamMemberService.getTeamMembersWithUsers(teamId, ensureCompletePaginationOptions(pagination)),
76+
teamMemberService.getTeamMembersWithUsers(teamId, pagination),
8177
teamMemberService.getTeamMembersWithUsersCount(teamId)
8278
]);
8379
await connection.commit();

api/src/paths/search/feature/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ describe('searchFeatures', () => {
311311
features: mockResults,
312312
pagination: {
313313
total: 1,
314-
per_page: 1,
314+
per_page: 25,
315315
current_page: 1,
316316
last_page: 1,
317317
sort: undefined,

api/src/paths/search/feature/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@ import {
99
import { SearchFeatureService } from '../../../services/search-feature-service';
1010
import { ISearchFeaturesFilters } from '../../../services/search-feature-service.interface';
1111
import { getLogger } from '../../../utils/logger';
12-
import {
13-
ensureCompletePaginationOptions,
14-
makePaginationOptionsFromBody,
15-
makePaginationResponse
16-
} from '../../../utils/pagination';
12+
import { makePaginationOptionsFromBody, makePaginationResponse } from '../../../utils/pagination';
1713

1814
const defaultLog = getLogger('paths/search/feature');
1915

@@ -53,7 +49,7 @@ export function searchFeatures(): RequestHandler {
5349
const pagination = makePaginationOptionsFromBody(req);
5450

5551
const [features, count] = await Promise.all([
56-
service.searchFeatures(filters, ensureCompletePaginationOptions(pagination)),
52+
service.searchFeatures(filters, pagination),
5753
service.getSearchFeaturesCount(filters)
5854
]);
5955
await connection.commit();

api/src/paths/search/index.test.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import sinonChai from 'sinon-chai';
55
import * as db from '../../database/db';
66
import { SearchService } from '../../services/search-service';
77
import { SearchResponseWithCounts } from '../../services/search-service.interface';
8-
import { ensureCompletePaginationOptions } from '../../utils/pagination';
98
import { getMockDBConnection, getRequestHandlerMocks } from '../../__mocks__/db';
109
import * as search from './index';
1110

@@ -31,7 +30,7 @@ describe('search', () => {
3130
taxonomy: { data: [], total: 0 }
3231
};
3332

34-
const defaultPaginationNumbers = { page: 1, limit: 2 };
33+
const defaultPaginationNumbers = { page: 1, limit: 2, sort: undefined, order: undefined };
3534

3635
afterEach(() => {
3736
sinon.restore();
@@ -56,7 +55,7 @@ describe('search', () => {
5655

5756
expect(mockSearch).to.have.been.calledOnceWith(
5857
{ keyword: 'moose habitat', feature_type_name: undefined },
59-
ensureCompletePaginationOptions(defaultPaginationNumbers)
58+
defaultPaginationNumbers
6059
);
6160

6261
expect(mockRes.statusValue).to.equal(200);
@@ -82,15 +81,15 @@ describe('search', () => {
8281

8382
expect(mockSearch).to.have.been.calledOnceWith(
8483
{ keyword: 'moose', feature_type_name: 'dataset' },
85-
ensureCompletePaginationOptions(defaultPaginationNumbers)
84+
defaultPaginationNumbers
8685
);
8786

8887
expect(mockRes.statusValue).to.equal(200);
8988
expect(mockRes.jsonValue).to.eql(mockResultsWithData);
9089
});
9190

9291
it('should return search results with custom pagination', async () => {
93-
const customNumbers = { page: 2, limit: 5 };
92+
const customNumbers = { page: 2, limit: 5, sort: undefined, order: undefined };
9493
const dbConnectionObj = getMockDBConnection({
9594
open: sinon.stub().resolves(),
9695
commit: sinon.stub().resolves(),
@@ -109,7 +108,7 @@ describe('search', () => {
109108

110109
expect(mockSearch).to.have.been.calledOnceWith(
111110
{ keyword: 'wildlife', feature_type_name: undefined },
112-
ensureCompletePaginationOptions(customNumbers)
111+
customNumbers
113112
);
114113

115114
expect(mockRes.statusValue).to.equal(200);
@@ -135,7 +134,7 @@ describe('search', () => {
135134

136135
expect(mockSearch).to.have.been.calledOnceWith(
137136
{ keyword: '', feature_type_name: undefined },
138-
ensureCompletePaginationOptions(defaultPaginationNumbers)
137+
defaultPaginationNumbers
139138
);
140139

141140
expect(mockRes.statusValue).to.equal(200);

api/src/paths/search/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { searchAllResponseSchema } from '../../openapi/schemas/search/search-all
77
import { SearchService } from '../../services/search-service';
88
import { SearchParams } from '../../services/search-service.interface';
99
import { getLogger } from '../../utils/logger';
10-
import { ensureCompletePaginationOptions, makePaginationOptionsFromRequest } from '../../utils/pagination';
10+
import { makePaginationOptionsFromRequest } from '../../utils/pagination';
1111

1212
const defaultLog = getLogger('paths/search/index');
1313

@@ -63,7 +63,7 @@ export function searchAll(): RequestHandler {
6363
const filters = parseQueryParams(req);
6464
const paginationOptions = makePaginationOptionsFromRequest(req);
6565

66-
const result = await searchService.search(filters, ensureCompletePaginationOptions(paginationOptions));
66+
const result = await searchService.search(filters, paginationOptions);
6767

6868
await connection.commit();
6969

api/src/paths/search/property/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ describe('searchProperties', () => {
203203
properties: mockResultsWithData,
204204
pagination: {
205205
total: 2,
206-
per_page: 2,
206+
per_page: 25,
207207
current_page: 1,
208208
last_page: 1,
209209
sort: undefined,

0 commit comments

Comments
 (0)