From 9ccbf8a08dc5cc20af0ad05e78921d9d51f0ce16 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 3 Feb 2023 00:39:03 +0100 Subject: [PATCH] catalog-backend: rename paginatedEntities to queryEntities Signed-off-by: Vincenzo Scamporlino --- plugins/catalog-backend/src/catalog/types.ts | 24 ++-- .../service/AuthorizedEntitiesCatalog.test.ts | 2 +- .../src/service/AuthorizedEntitiesCatalog.ts | 18 +-- .../service/DefaultEntitiesCatalog.test.ts | 130 +++++++++--------- .../src/service/DefaultEntitiesCatalog.ts | 20 +-- .../src/service/createRouter.test.ts | 20 +-- .../src/service/createRouter.ts | 6 +- .../src/service/request/index.ts | 2 +- ...st.ts => parseQueryEntitiesParams.test.ts} | 32 ++--- ...sParams.ts => parseQueryEntitiesParams.ts} | 36 +++-- plugins/catalog-backend/src/service/util.ts | 22 +-- 11 files changed, 154 insertions(+), 158 deletions(-) rename plugins/catalog-backend/src/service/request/{parsePaginatedEntitiesParams.test.ts => parseQueryEntitiesParams.test.ts} (81%) rename plugins/catalog-backend/src/service/request/{parsePaginatedEntitiesParams.ts => parseQueryEntitiesParams.ts} (74%) diff --git a/plugins/catalog-backend/src/catalog/types.ts b/plugins/catalog-backend/src/catalog/types.ts index 451f757e65..93720e5a68 100644 --- a/plugins/catalog-backend/src/catalog/types.ts +++ b/plugins/catalog-backend/src/catalog/types.ts @@ -179,9 +179,7 @@ export interface EntitiesCatalog { * * @param request */ - paginatedEntities( - request?: PaginatedEntitiesRequest, - ): Promise; + queryEntities(request?: QueryEntitiesRequest): Promise; /** * Removes a single entity. @@ -213,18 +211,18 @@ export interface EntitiesCatalog { } /** - * The request shape for {@link EntitiesCatalog.paginatedEntities}. + * The request shape for {@link EntitiesCatalog.queryEntities}. */ -export type PaginatedEntitiesRequest = - | PaginatedEntitiesInitialRequest - | PaginatedEntitiesCursorRequest; +export type QueryEntitiesRequest = + | QueryEntitiesInitialRequest + | QueryEntitiesCursorRequest; /** - * The initial request for {@link EntitiesCatalog.paginatedEntities}. + * The initial request for {@link EntitiesCatalog.queryEntities}. * The request take immutable properties that are going to be bound * for the current and the next pagination requests. */ -export interface PaginatedEntitiesInitialRequest { +export interface QueryEntitiesInitialRequest { authorizationToken?: string; fields?: (entity: Entity) => Entity; limit?: number; @@ -234,10 +232,10 @@ export interface PaginatedEntitiesInitialRequest { } /** - * Request for {@link EntitiesCatalog.paginatedEntities} used to + * Request for {@link EntitiesCatalog.queryEntities} used to * move forward or backward on the data. */ -export interface PaginatedEntitiesCursorRequest { +export interface QueryEntitiesCursorRequest { authorizationToken?: string; fields?: (entity: Entity) => Entity; limit?: number; @@ -245,9 +243,9 @@ export interface PaginatedEntitiesCursorRequest { } /** - * The response shape for {@link EntitiesCatalog.paginatedEntities}. + * The response shape for {@link EntitiesCatalog.queryEntities}. */ -export interface PaginatedEntitiesResponse { +export interface QueryEntitiesResponse { /** * The entities for the current pagination request */ diff --git a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts index 8ee10fdbcb..e559f5fd49 100644 --- a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts @@ -30,7 +30,7 @@ describe('AuthorizedEntitiesCatalog', () => { facets: jest.fn(), refresh: jest.fn(), listAncestors: jest.fn(), - paginatedEntities: jest.fn(), + queryEntities: jest.fn(), }; const fakePermissionApi = { authorize: jest.fn(), diff --git a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts index 5ae31158f8..2a5388c3d5 100644 --- a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts @@ -35,11 +35,11 @@ import { EntityFacetsRequest, EntityFacetsResponse, EntityFilter, - PaginatedEntitiesRequest, - PaginatedEntitiesResponse, + QueryEntitiesRequest, + QueryEntitiesResponse, } from '../catalog/types'; import { basicEntityFilter } from './request/basicEntityFilter'; -import { isPaginatedEntitiesInitialRequest } from './util'; +import { isQueryEntitiesInitialRequest } from './util'; export class AuthorizedEntitiesCatalog implements EntitiesCatalog { constructor( @@ -109,9 +109,9 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog { return this.entitiesCatalog.entitiesBatch(request); } - async paginatedEntities( - request?: PaginatedEntitiesRequest, - ): Promise { + async queryEntities( + request?: QueryEntitiesRequest, + ): Promise { const authorizeDecision = ( await this.permissionApi.authorizeConditional( [{ permission: catalogEntityReadPermission }], @@ -131,9 +131,9 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog { authorizeDecision.conditions, ); - return this.entitiesCatalog.paginatedEntities({ + return this.entitiesCatalog.queryEntities({ ...request, - ...(isPaginatedEntitiesInitialRequest(request) && { + ...(isQueryEntitiesInitialRequest(request) && { filter: request?.filter ? { allOf: [permissionFilter, request.filter] } : permissionFilter, @@ -141,7 +141,7 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog { }); } - return this.entitiesCatalog.paginatedEntities(request); + return this.entitiesCatalog.queryEntities(request); } async removeEntityByUid( diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts index a25cbf2240..92b2ecb3c5 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts @@ -20,8 +20,8 @@ import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { Knex } from 'knex'; import { v4 as uuid, v4 } from 'uuid'; import { - PaginatedEntitiesCursorRequest, - PaginatedEntitiesInitialRequest, + QueryEntitiesCursorRequest, + QueryEntitiesInitialRequest, } from '../catalog/types'; import { applyDatabaseMigrations } from '../database/migrations'; import { @@ -723,7 +723,7 @@ describe('DefaultEntitiesCatalog', () => { ); }); - describe('paginatedEntities', () => { + describe('queryEntities', () => { it.each(databases.eachSupportedId())( 'should return paginated entities and scroll the items accordingly, %p', async databaseId => { @@ -764,89 +764,89 @@ describe('DefaultEntitiesCatalog', () => { const limit = 2; // initial request - const request1: PaginatedEntitiesInitialRequest = { + const request1: QueryEntitiesInitialRequest = { filter, limit, sortFields: [{ field: 'metadata.name', order: 'asc' }], }; - const response1 = await catalog.paginatedEntities(request1); + const response1 = await catalog.queryEntities(request1); expect(response1.entities).toEqual([entityFrom('A'), entityFrom('B')]); expect(response1.nextCursor).toBeDefined(); expect(response1.prevCursor).toBeUndefined(); expect(response1.totalItems).toBe(names.length); // second request (forward) - const request2: PaginatedEntitiesCursorRequest = { + const request2: QueryEntitiesCursorRequest = { cursor: response1.nextCursor!, limit, }; - const response2 = await catalog.paginatedEntities(request2); + const response2 = await catalog.queryEntities(request2); expect(response2.entities).toEqual([entityFrom('C'), entityFrom('D')]); expect(response2.nextCursor).toBeDefined(); expect(response2.prevCursor).toBeDefined(); expect(response2.totalItems).toBe(names.length); // third request (forward) - const request3: PaginatedEntitiesCursorRequest = { + const request3: QueryEntitiesCursorRequest = { cursor: response2.nextCursor!, limit, }; - const response3 = await catalog.paginatedEntities(request3); + const response3 = await catalog.queryEntities(request3); expect(response3.entities).toEqual([entityFrom('E'), entityFrom('F')]); expect(response3.nextCursor).toBeDefined(); expect(response3.prevCursor).toBeDefined(); expect(response3.totalItems).toBe(names.length); // fourth request (backwards) - const request4: PaginatedEntitiesCursorRequest = { + const request4: QueryEntitiesCursorRequest = { cursor: response3.prevCursor!, limit, }; - const response4 = await catalog.paginatedEntities(request4); + const response4 = await catalog.queryEntities(request4); expect(response4.entities).toEqual([entityFrom('C'), entityFrom('D')]); expect(response4.nextCursor).toBeDefined(); expect(response4.prevCursor).toBeDefined(); expect(response4.totalItems).toBe(names.length); // fifth request (backwards) - const request5: PaginatedEntitiesCursorRequest = { + const request5: QueryEntitiesCursorRequest = { cursor: response4.prevCursor!, limit, }; - const response5 = await catalog.paginatedEntities(request5); + const response5 = await catalog.queryEntities(request5); expect(response5.entities).toEqual([entityFrom('A'), entityFrom('B')]); expect(response5.nextCursor).toBeDefined(); expect(response5.prevCursor).toBeUndefined(); expect(response5.totalItems).toBe(names.length); // sixth request (forward) - const request6: PaginatedEntitiesCursorRequest = { + const request6: QueryEntitiesCursorRequest = { cursor: response5.nextCursor!, limit, }; - const response6 = await catalog.paginatedEntities(request6); + const response6 = await catalog.queryEntities(request6); expect(response6.entities).toEqual([entityFrom('C'), entityFrom('D')]); expect(response6.nextCursor).toBeDefined(); expect(response6.prevCursor).toBeDefined(); expect(response6.totalItems).toBe(names.length); // seventh request (forward) - const request7: PaginatedEntitiesCursorRequest = { + const request7: QueryEntitiesCursorRequest = { cursor: response6.nextCursor!, limit, }; - const response7 = await catalog.paginatedEntities(request7); + const response7 = await catalog.queryEntities(request7); expect(response7.entities).toEqual([entityFrom('E'), entityFrom('F')]); expect(response7.nextCursor).toBeDefined(); expect(response7.prevCursor).toBeDefined(); expect(response7.totalItems).toBe(names.length); // seventh.2 request (forward with a different limit) - const request7bis: PaginatedEntitiesCursorRequest = { + const request7bis: QueryEntitiesCursorRequest = { cursor: response6.nextCursor!, limit: limit + 1, }; - const response7bis = await catalog.paginatedEntities(request7bis); + const response7bis = await catalog.queryEntities(request7bis); expect(response7bis.entities).toEqual([ entityFrom('E'), entityFrom('F'), @@ -857,11 +857,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response7bis.totalItems).toBe(names.length); // last request (forward) - const request8: PaginatedEntitiesCursorRequest = { + const request8: QueryEntitiesCursorRequest = { cursor: response7.nextCursor!, limit, }; - const response8 = await catalog.paginatedEntities(request8); + const response8 = await catalog.queryEntities(request8); expect(response8.entities).toEqual([entityFrom('G')]); expect(response8.nextCursor).toBeUndefined(); expect(response8.prevCursor).toBeDefined(); @@ -909,45 +909,45 @@ describe('DefaultEntitiesCatalog', () => { const limit = 2; // initial request - const request1: PaginatedEntitiesInitialRequest = { + const request1: QueryEntitiesInitialRequest = { filter, limit, sortFields: [{ field: 'metadata.name', order: 'desc' }], }; - const response1 = await catalog.paginatedEntities(request1); + const response1 = await catalog.queryEntities(request1); expect(response1.entities).toEqual([entityFrom('G'), entityFrom('F')]); expect(response1.nextCursor).toBeDefined(); expect(response1.prevCursor).toBeUndefined(); expect(response1.totalItems).toBe(names.length); // second request (forward) - const request2: PaginatedEntitiesCursorRequest = { + const request2: QueryEntitiesCursorRequest = { cursor: response1.nextCursor!, limit, }; - const response2 = await catalog.paginatedEntities(request2); + const response2 = await catalog.queryEntities(request2); expect(response2.entities).toEqual([entityFrom('E'), entityFrom('D')]); expect(response2.nextCursor).toBeDefined(); expect(response2.prevCursor).toBeDefined(); expect(response2.totalItems).toBe(names.length); // third request (forward) - const request3: PaginatedEntitiesCursorRequest = { + const request3: QueryEntitiesCursorRequest = { cursor: response2.nextCursor!, limit, }; - const response3 = await catalog.paginatedEntities(request3); + const response3 = await catalog.queryEntities(request3); expect(response3.entities).toEqual([entityFrom('C'), entityFrom('B')]); expect(response3.nextCursor).toBeDefined(); expect(response3.prevCursor).toBeDefined(); expect(response3.totalItems).toBe(names.length); // fourth request (backwards) - const request4: PaginatedEntitiesCursorRequest = { + const request4: QueryEntitiesCursorRequest = { cursor: response3.prevCursor!, limit, }; - const response4 = await catalog.paginatedEntities(request4); + const response4 = await catalog.queryEntities(request4); expect(response4.entities).toEqual([entityFrom('E'), entityFrom('D')]); expect(response4.nextCursor).toBeDefined(); @@ -955,44 +955,44 @@ describe('DefaultEntitiesCatalog', () => { expect(response4.totalItems).toBe(names.length); // fifth request (backwards) - const request5: PaginatedEntitiesCursorRequest = { + const request5: QueryEntitiesCursorRequest = { cursor: response4.prevCursor!, limit, }; - const response5 = await catalog.paginatedEntities(request5); + const response5 = await catalog.queryEntities(request5); expect(response5.entities).toEqual([entityFrom('G'), entityFrom('F')]); expect(response5.nextCursor).toBeDefined(); expect(response5.prevCursor).toBeUndefined(); expect(response5.totalItems).toBe(names.length); // sixth request (forward) - const request6: PaginatedEntitiesCursorRequest = { + const request6: QueryEntitiesCursorRequest = { cursor: response5.nextCursor!, limit, }; - const response6 = await catalog.paginatedEntities(request6); + const response6 = await catalog.queryEntities(request6); expect(response6.entities).toEqual([entityFrom('E'), entityFrom('D')]); expect(response6.nextCursor).toBeDefined(); expect(response6.prevCursor).toBeDefined(); expect(response6.totalItems).toBe(names.length); // seventh request (forward) - const request7: PaginatedEntitiesCursorRequest = { + const request7: QueryEntitiesCursorRequest = { cursor: response6.nextCursor!, limit, }; - const response7 = await catalog.paginatedEntities(request7); + const response7 = await catalog.queryEntities(request7); expect(response7.entities).toEqual([entityFrom('C'), entityFrom('B')]); expect(response7.nextCursor).toBeDefined(); expect(response7.prevCursor).toBeDefined(); expect(response7.totalItems).toBe(names.length); // seventh.2 request (forward with a different limit) - const request7bis: PaginatedEntitiesCursorRequest = { + const request7bis: QueryEntitiesCursorRequest = { cursor: response6.nextCursor!, limit: limit + 1, }; - const response7bis = await catalog.paginatedEntities(request7bis); + const response7bis = await catalog.queryEntities(request7bis); expect(response7bis.entities).toEqual([ entityFrom('C'), entityFrom('B'), @@ -1003,11 +1003,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response7bis.totalItems).toBe(names.length); // last request (forward) - const request8: PaginatedEntitiesCursorRequest = { + const request8: QueryEntitiesCursorRequest = { cursor: response7.nextCursor!, limit, }; - const response8 = await catalog.paginatedEntities(request8); + const response8 = await catalog.queryEntities(request8); expect(response8.entities).toEqual([entityFrom('A')]); expect(response8.nextCursor).toBeUndefined(); expect(response8.prevCursor).toBeDefined(); @@ -1052,14 +1052,14 @@ describe('DefaultEntitiesCatalog', () => { key: 'spec.should_include_this', }; - const request: PaginatedEntitiesInitialRequest = { + const request: QueryEntitiesInitialRequest = { filter, limit: 100, sortFields: [{ field: 'metadata.name', order: 'asc' }], query: 'cAt ', }; - const response = await catalog.paginatedEntities(request); + const response = await catalog.queryEntities(request); expect(response.entities).toEqual([ entityFrom('atcatss'), entityFrom('cat'), @@ -1094,10 +1094,10 @@ describe('DefaultEntitiesCatalog', () => { stitcher, }); - const request: PaginatedEntitiesInitialRequest = { + const request: QueryEntitiesInitialRequest = { limit: 0, }; - const response = await catalog.paginatedEntities(request); + const response = await catalog.queryEntities(request); expect(response).toEqual({ totalItems: 20, entities: [] }); }, ); @@ -1125,11 +1125,11 @@ describe('DefaultEntitiesCatalog', () => { const limit = 2; // initial request - const request1: PaginatedEntitiesInitialRequest = { + const request1: QueryEntitiesInitialRequest = { limit, sortFields: [{ field: 'metadata.name', order: 'asc' }], }; - const response1 = await catalog.paginatedEntities(request1); + const response1 = await catalog.queryEntities(request1); expect(response1.entities).toMatchObject([ entityFrom('AA'), entityFrom('AA'), @@ -1139,11 +1139,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response1.totalItems).toBe(6); // second request (forward) - const request2: PaginatedEntitiesCursorRequest = { + const request2: QueryEntitiesCursorRequest = { cursor: response1.nextCursor!, limit, }; - const response2 = await catalog.paginatedEntities(request2); + const response2 = await catalog.queryEntities(request2); expect(response2.entities).toMatchObject([ entityFrom('AA'), entityFrom('AA'), @@ -1153,11 +1153,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response2.totalItems).toBe(6); // third request (forward) - const request3: PaginatedEntitiesCursorRequest = { + const request3: QueryEntitiesCursorRequest = { cursor: response2.nextCursor!, limit, }; - const response3 = await catalog.paginatedEntities(request3); + const response3 = await catalog.queryEntities(request3); expect(response3.entities).toEqual([ entityFrom('CC'), entityFrom('DD'), @@ -1167,11 +1167,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response3.totalItems).toBe(6); // forth request (backward) - const request4: PaginatedEntitiesCursorRequest = { + const request4: QueryEntitiesCursorRequest = { cursor: response3.prevCursor!, limit, }; - const response4 = await catalog.paginatedEntities(request4); + const response4 = await catalog.queryEntities(request4); expect(response4.entities).toMatchObject([ entityFrom('AA'), entityFrom('AA'), @@ -1181,11 +1181,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response4.totalItems).toBe(6); // fifth request (backward) - const request5: PaginatedEntitiesCursorRequest = { + const request5: QueryEntitiesCursorRequest = { cursor: response4.prevCursor!, limit, }; - const response5 = await catalog.paginatedEntities(request5); + const response5 = await catalog.queryEntities(request5); expect(response5.entities).toMatchObject([ entityFrom('AA'), entityFrom('AA'), @@ -1225,10 +1225,10 @@ describe('DefaultEntitiesCatalog', () => { const limit = 2; // initial request - const request1: PaginatedEntitiesInitialRequest = { + const request1: QueryEntitiesInitialRequest = { limit, }; - const response1 = await catalog.paginatedEntities(request1); + const response1 = await catalog.queryEntities(request1); expect(response1.entities).toMatchObject([ entityFrom('AA'), entityFrom('CC'), @@ -1238,11 +1238,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response1.totalItems).toBe(6); // second request (forward) - const request2: PaginatedEntitiesCursorRequest = { + const request2: QueryEntitiesCursorRequest = { cursor: response1.nextCursor!, limit, }; - const response2 = await catalog.paginatedEntities(request2); + const response2 = await catalog.queryEntities(request2); expect(response2.entities).toMatchObject([ entityFrom('DD'), entityFrom('AA', { namespace: 'namespace2' }), @@ -1252,11 +1252,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response2.totalItems).toBe(6); // third request (forward) - const request3: PaginatedEntitiesCursorRequest = { + const request3: QueryEntitiesCursorRequest = { cursor: response2.nextCursor!, limit, }; - const response3 = await catalog.paginatedEntities(request3); + const response3 = await catalog.queryEntities(request3); expect(response3.entities).toMatchObject([ entityFrom('AA', { namespace: 'namespace3' }), entityFrom('AA', { namespace: 'namespace4' }), @@ -1266,11 +1266,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response3.totalItems).toBe(6); // forth request (backward) - const request4: PaginatedEntitiesCursorRequest = { + const request4: QueryEntitiesCursorRequest = { cursor: response3.prevCursor!, limit, }; - const response4 = await catalog.paginatedEntities(request4); + const response4 = await catalog.queryEntities(request4); expect(response4.entities).toMatchObject([ entityFrom('DD'), entityFrom('AA', { namespace: 'namespace2' }), @@ -1280,11 +1280,11 @@ describe('DefaultEntitiesCatalog', () => { expect(response4.totalItems).toBe(6); // fifth request (backward) - const request5: PaginatedEntitiesCursorRequest = { + const request5: QueryEntitiesCursorRequest = { cursor: response4.prevCursor!, limit, }; - const response5 = await catalog.paginatedEntities(request5); + const response5 = await catalog.queryEntities(request5); expect(response5.entities).toMatchObject([ entityFrom('AA'), entityFrom('CC'), @@ -1306,11 +1306,11 @@ describe('DefaultEntitiesCatalog', () => { JSON.stringify({ filter: 'notavalidfilter' }), 'utf8', ).toString('base64'); - const request: PaginatedEntitiesCursorRequest = { + const request: QueryEntitiesCursorRequest = { cursor, }; - await expect(catalog.paginatedEntities(request)).rejects.toThrow( + await expect(catalog.queryEntities(request)).rejects.toThrow( Error('Malformed cursor, could not be parsed'), ); }); diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts index 67fe77cc8b..fad5736f12 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts @@ -37,8 +37,8 @@ import { EntityFacetsResponse, EntityFilter, EntityPagination, - PaginatedEntitiesRequest, - PaginatedEntitiesResponse, + QueryEntitiesRequest, + QueryEntitiesResponse, EntityOrder, } from '../catalog/types'; import { @@ -53,8 +53,8 @@ import { import { Stitcher } from '../stitching/Stitcher'; import { - isPaginatedEntitiesCursorRequest, - isPaginatedEntitiesInitialRequest, + isQueryEntitiesCursorRequest, + isQueryEntitiesInitialRequest, } from './util'; const defaultSortField: EntityOrder = { @@ -332,9 +332,9 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog { return { items }; } - async paginatedEntities( - request?: PaginatedEntitiesRequest, - ): Promise { + async queryEntities( + request?: QueryEntitiesRequest, + ): Promise { const db = this.database; const limit = request?.limit ?? 20; @@ -693,13 +693,13 @@ function decodeCursor(encodedCursor: string) { } function parseCursorFromRequest( - request?: PaginatedEntitiesRequest, + request?: QueryEntitiesRequest, ): Partial { - if (isPaginatedEntitiesInitialRequest(request)) { + if (isQueryEntitiesInitialRequest(request)) { const { filter, sortFields = [defaultSortField], query } = request; return { filter, sortFields, query }; } - if (isPaginatedEntitiesCursorRequest(request)) { + if (isQueryEntitiesCursorRequest(request)) { try { return decodeCursor(request.cursor); } catch { diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 8f5aeab2a0..d25d2b0cb4 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -52,7 +52,7 @@ describe('createRouter readonly disabled', () => { removeEntityByUid: jest.fn(), entityAncestry: jest.fn(), facets: jest.fn(), - paginatedEntities: jest.fn(), + queryEntities: jest.fn(), }; locationService = { getLocation: jest.fn(), @@ -142,7 +142,7 @@ describe('createRouter readonly disabled', () => { { apiVersion: 'a', kind: 'b', metadata: { name: 'n' } }, ]; - entitiesCatalog.paginatedEntities.mockResolvedValueOnce({ + entitiesCatalog.queryEntities.mockResolvedValueOnce({ entities, totalItems: 100, nextCursor: 'something', @@ -158,7 +158,7 @@ describe('createRouter readonly disabled', () => { }); it('parses initial request', async () => { - entitiesCatalog.paginatedEntities.mockResolvedValueOnce({ + entitiesCatalog.queryEntities.mockResolvedValueOnce({ entities: [], totalItems: 0, }); @@ -167,8 +167,8 @@ describe('createRouter readonly disabled', () => { ); expect(response.status).toEqual(200); - expect(entitiesCatalog.paginatedEntities).toHaveBeenCalledTimes(1); - expect(entitiesCatalog.paginatedEntities).toHaveBeenCalledWith({ + expect(entitiesCatalog.queryEntities).toHaveBeenCalledTimes(1); + expect(entitiesCatalog.queryEntities).toHaveBeenCalledWith({ filter: { anyOf: [ { @@ -192,7 +192,7 @@ describe('createRouter readonly disabled', () => { { apiVersion: 'a', kind: 'b', metadata: { name: 'n' } }, ]; - entitiesCatalog.paginatedEntities.mockResolvedValueOnce({ + entitiesCatalog.queryEntities.mockResolvedValueOnce({ entities, totalItems: 100, nextCursor: 'next', @@ -201,8 +201,8 @@ describe('createRouter readonly disabled', () => { const response = await request(app).get( '/entities/by-query?cursor=something', ); - expect(entitiesCatalog.paginatedEntities).toHaveBeenCalledTimes(1); - expect(entitiesCatalog.paginatedEntities).toHaveBeenCalledWith({ + expect(entitiesCatalog.queryEntities).toHaveBeenCalledTimes(1); + expect(entitiesCatalog.queryEntities).toHaveBeenCalledWith({ cursor: 'something', }); expect(response.status).toEqual(200); @@ -639,7 +639,7 @@ describe('createRouter readonly enabled', () => { removeEntityByUid: jest.fn(), entityAncestry: jest.fn(), facets: jest.fn(), - paginatedEntities: jest.fn(), + queryEntities: jest.fn(), }; locationService = { getLocation: jest.fn(), @@ -830,7 +830,7 @@ describe('NextRouter permissioning', () => { removeEntityByUid: jest.fn(), entityAncestry: jest.fn(), facets: jest.fn(), - paginatedEntities: jest.fn(), + queryEntities: jest.fn(), }; locationService = { getLocation: jest.fn(), diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts index 994b676345..7603f6955d 100644 --- a/plugins/catalog-backend/src/service/createRouter.ts +++ b/plugins/catalog-backend/src/service/createRouter.ts @@ -39,7 +39,7 @@ import { parseEntityFilterParams, parseEntityPaginationParams, parseEntityTransformParams, - parsePaginatedEntitiesParams, + parseQueryEntitiesParams, } from './request'; import { parseEntityFacetParams } from './request/parseEntityFacetParams'; import { parseEntityOrderParams } from './request/parseEntityOrderParams'; @@ -132,8 +132,8 @@ export async function createRouter( res.json(entities); }) .get('/entities/by-query', async (req, res) => { - const response = await entitiesCatalog.paginatedEntities({ - ...parsePaginatedEntitiesParams(req.query), + const response = await entitiesCatalog.queryEntities({ + ...parseQueryEntitiesParams(req.query), authorizationToken: getBearerToken(req.header('authorization')), }); diff --git a/plugins/catalog-backend/src/service/request/index.ts b/plugins/catalog-backend/src/service/request/index.ts index 5a55c11ca0..d9297fc122 100644 --- a/plugins/catalog-backend/src/service/request/index.ts +++ b/plugins/catalog-backend/src/service/request/index.ts @@ -19,4 +19,4 @@ export { basicEntityFilter } from './basicEntityFilter'; export { parseEntityFilterParams } from './parseEntityFilterParams'; export { parseEntityPaginationParams } from './parseEntityPaginationParams'; export { parseEntityTransformParams } from './parseEntityTransformParams'; -export { parsePaginatedEntitiesParams } from './parsePaginatedEntitiesParams'; +export { parseQueryEntitiesParams } from './parseQueryEntitiesParams'; diff --git a/plugins/catalog-backend/src/service/request/parsePaginatedEntitiesParams.test.ts b/plugins/catalog-backend/src/service/request/parseQueryEntitiesParams.test.ts similarity index 81% rename from plugins/catalog-backend/src/service/request/parsePaginatedEntitiesParams.test.ts rename to plugins/catalog-backend/src/service/request/parseQueryEntitiesParams.test.ts index 53d44c8ca5..ab702438c2 100644 --- a/plugins/catalog-backend/src/service/request/parsePaginatedEntitiesParams.test.ts +++ b/plugins/catalog-backend/src/service/request/parseQueryEntitiesParams.test.ts @@ -15,12 +15,12 @@ */ import { - PaginatedEntitiesCursorRequest, - PaginatedEntitiesInitialRequest, + QueryEntitiesCursorRequest, + QueryEntitiesInitialRequest, } from '../../catalog/types'; -import { parsePaginatedEntitiesParams } from './parsePaginatedEntitiesParams'; +import { parseQueryEntitiesParams } from './parseQueryEntitiesParams'; -describe('parsePaginatedEntitiesParams', () => { +describe('parseQueryEntitiesParams', () => { describe('initial request', () => { it('should parse all the defined params', () => { const validRequest = { @@ -31,9 +31,9 @@ describe('parsePaginatedEntitiesParams', () => { sortField: ['metadata.name,desc'], query: 'query', }; - const parsedObj = parsePaginatedEntitiesParams( + const parsedObj = parseQueryEntitiesParams( validRequest, - ) as PaginatedEntitiesInitialRequest; + ) as QueryEntitiesInitialRequest; expect(parsedObj.limit).toBe(3); expect(parsedObj.fields).toBeDefined(); expect(parsedObj.sortFields).toEqual([ @@ -45,9 +45,9 @@ describe('parsePaginatedEntitiesParams', () => { expect(parsedObj).not.toHaveProperty('cursor'); }); it('should ignore optional params', () => { - const parsedObj = parsePaginatedEntitiesParams( + const parsedObj = parseQueryEntitiesParams( {}, - ) as PaginatedEntitiesInitialRequest; + ) as QueryEntitiesInitialRequest; expect(parsedObj.limit).toBeUndefined(); expect(parsedObj.fields).toBeUndefined(); expect(parsedObj.sortFields).toBeUndefined(); @@ -66,7 +66,7 @@ describe('parsePaginatedEntitiesParams', () => { { fields: [4] }, { query: [] }, ])('should throw if some parameter is not valid %p', params => { - expect(() => parsePaginatedEntitiesParams(params)).toThrow(); + expect(() => parseQueryEntitiesParams(params)).toThrow(); }); }); @@ -78,9 +78,9 @@ describe('parsePaginatedEntitiesParams', () => { limit: '3', cursor: 'cursor', }; - const parsedObj = parsePaginatedEntitiesParams( + const parsedObj = parseQueryEntitiesParams( validRequest, - ) as PaginatedEntitiesCursorRequest; + ) as QueryEntitiesCursorRequest; expect(parsedObj.limit).toBe(3); expect(parsedObj.fields).toBeDefined(); expect(parsedObj.cursor).toBe('cursor'); @@ -97,9 +97,9 @@ describe('parsePaginatedEntitiesParams', () => { sortFieldOrder: 'desc', query: 'query', }; - const parsedObj = parsePaginatedEntitiesParams( + const parsedObj = parseQueryEntitiesParams( validRequest, - ) as PaginatedEntitiesCursorRequest; + ) as QueryEntitiesCursorRequest; expect(parsedObj.limit).toBe(3); expect(parsedObj.fields).toBeDefined(); expect(parsedObj.cursor).toBe('cursor'); @@ -110,9 +110,9 @@ describe('parsePaginatedEntitiesParams', () => { }); it('should ignore optional params', () => { - const parsedObj = parsePaginatedEntitiesParams( + const parsedObj = parseQueryEntitiesParams( {}, - ) as PaginatedEntitiesCursorRequest; + ) as QueryEntitiesCursorRequest; expect(parsedObj.limit).toBeUndefined(); expect(parsedObj.fields).toBeUndefined(); }); @@ -124,7 +124,7 @@ describe('parsePaginatedEntitiesParams', () => { { cursor: [] }, { fields: [4] }, ])('should throw if some parameter is not valid %p', params => { - expect(() => parsePaginatedEntitiesParams(params)).toThrow(); + expect(() => parseQueryEntitiesParams(params)).toThrow(); }); }); }); diff --git a/plugins/catalog-backend/src/service/request/parsePaginatedEntitiesParams.ts b/plugins/catalog-backend/src/service/request/parseQueryEntitiesParams.ts similarity index 74% rename from plugins/catalog-backend/src/service/request/parsePaginatedEntitiesParams.ts rename to plugins/catalog-backend/src/service/request/parseQueryEntitiesParams.ts index f5730d3297..858189b0d2 100644 --- a/plugins/catalog-backend/src/service/request/parsePaginatedEntitiesParams.ts +++ b/plugins/catalog-backend/src/service/request/parseQueryEntitiesParams.ts @@ -15,28 +15,27 @@ */ import { - PaginatedEntitiesCursorRequest, - PaginatedEntitiesInitialRequest, - PaginatedEntitiesRequest, + QueryEntitiesCursorRequest, + QueryEntitiesInitialRequest, + QueryEntitiesRequest, } from '../../catalog/types'; import { parseIntegerParam, parseStringParam } from './common'; import { parseEntityFilterParams } from './parseEntityFilterParams'; import { parseEntitySortFieldParams } from './parseEntitySortFieldParams'; import { parseEntityTransformParams } from './parseEntityTransformParams'; -export function parsePaginatedEntitiesParams( +export function parseQueryEntitiesParams( params: Record, -): Omit { +): Omit { const fields = parseEntityTransformParams(params); const limit = parseIntegerParam(params.limit, 'limit'); const cursor = parseStringParam(params.cursor, 'cursor'); if (cursor) { - const response: Omit = - { - cursor, - fields, - limit, - }; + const response: Omit = { + cursor, + fields, + limit, + }; return response; } @@ -44,14 +43,13 @@ export function parsePaginatedEntitiesParams( const query = parseStringParam(params.query, 'query'); const sortFields = parseEntitySortFieldParams(params); - const response: Omit = - { - fields, - filter, - limit, - sortFields, - query, - }; + const response: Omit = { + fields, + filter, + limit, + sortFields, + query, + }; return response; } diff --git a/plugins/catalog-backend/src/service/util.ts b/plugins/catalog-backend/src/service/util.ts index 958b4153f8..1ab154a86d 100644 --- a/plugins/catalog-backend/src/service/util.ts +++ b/plugins/catalog-backend/src/service/util.ts @@ -19,9 +19,9 @@ import { Request } from 'express'; import lodash from 'lodash'; import { z } from 'zod'; import { - PaginatedEntitiesCursorRequest, - PaginatedEntitiesInitialRequest, - PaginatedEntitiesRequest, + QueryEntitiesCursorRequest, + QueryEntitiesInitialRequest, + QueryEntitiesRequest, } from '../catalog/types'; export async function requireRequestBody(req: Request): Promise { @@ -71,20 +71,20 @@ export function disallowReadonlyMode(readonly: boolean) { } } -export function isPaginatedEntitiesInitialRequest( - input: PaginatedEntitiesRequest | undefined, -): input is PaginatedEntitiesInitialRequest { +export function isQueryEntitiesInitialRequest( + input: QueryEntitiesRequest | undefined, +): input is QueryEntitiesInitialRequest { if (!input) { return false; } - return !isPaginatedEntitiesCursorRequest(input); + return !isQueryEntitiesCursorRequest(input); } -export function isPaginatedEntitiesCursorRequest( - input: PaginatedEntitiesRequest | undefined, -): input is PaginatedEntitiesCursorRequest { +export function isQueryEntitiesCursorRequest( + input: QueryEntitiesRequest | undefined, +): input is QueryEntitiesCursorRequest { if (!input) { return false; } - return !!(input as PaginatedEntitiesCursorRequest).cursor; + return !!(input as QueryEntitiesCursorRequest).cursor; }