From e3ae56a6b6e06943453a0adab1ce0333f3eb40bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20CG?= Date: Mon, 21 Oct 2024 13:54:47 +0200 Subject: [PATCH] feat: add adapter for related prompts --- .../src/endpoint-adapters/index.ts | 1 + .../related-prompts.endpoint-adapter.ts | 24 +++++++++++++++++++ .../src/mappers/requests/index.ts | 1 + .../related-prompts-request.mapper.ts | 12 ++++++++++ .../src/mappers/responses/index.ts | 1 + .../related-prompts-response.mapper.ts | 14 +++++++++++ .../src/platform.adapter.ts | 3 ++- .../src/schemas/models/index.ts | 1 + .../schemas/models/related-prompt.schema.ts | 13 ++++++++++ .../src/schemas/requests/index.ts | 1 + .../related-prompts-request.schema.ts | 14 +++++++++++ .../src/schemas/responses/index.ts | 1 + .../related-prompts-response.schema.ts | 18 ++++++++++++++ .../src/types/models/index.ts | 1 + .../src/types/models/related-prompt.model.ts | 8 +++++++ .../src/types/platform-adapter.types.ts | 6 +++-- .../src/types/requests/index.ts | 1 + .../requests/related-prompts-request.model.ts | 10 ++++++++ .../src/types/responses/index.ts | 1 + .../related-prompts-response.model.ts | 11 +++++++++ 20 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 packages/x-adapter-platform/src/endpoint-adapters/related-prompts.endpoint-adapter.ts create mode 100644 packages/x-adapter-platform/src/mappers/requests/related-prompts-request.mapper.ts create mode 100644 packages/x-adapter-platform/src/mappers/responses/related-prompts-response.mapper.ts create mode 100644 packages/x-adapter-platform/src/schemas/models/related-prompt.schema.ts create mode 100644 packages/x-adapter-platform/src/schemas/requests/related-prompts-request.schema.ts create mode 100644 packages/x-adapter-platform/src/schemas/responses/related-prompts-response.schema.ts create mode 100644 packages/x-adapter-platform/src/types/models/related-prompt.model.ts create mode 100644 packages/x-adapter-platform/src/types/requests/related-prompts-request.model.ts create mode 100644 packages/x-adapter-platform/src/types/responses/related-prompts-response.model.ts diff --git a/packages/x-adapter-platform/src/endpoint-adapters/index.ts b/packages/x-adapter-platform/src/endpoint-adapters/index.ts index 10dd4e490..b2e517250 100644 --- a/packages/x-adapter-platform/src/endpoint-adapters/index.ts +++ b/packages/x-adapter-platform/src/endpoint-adapters/index.ts @@ -3,6 +3,7 @@ export * from './identifier-results.endpoint-adapter'; export * from './next-queries.endpoint-adapter'; export * from './query-suggestions.endpoint-adapter'; export * from './recommendations.endpoint-adapter'; +export * from './related-prompts.endpoint-adapter'; export * from './related-tags.endpoint-adapter'; export * from './search.endpoint-adapter'; export * from './semantic-queries.endpoint-adapter'; diff --git a/packages/x-adapter-platform/src/endpoint-adapters/related-prompts.endpoint-adapter.ts b/packages/x-adapter-platform/src/endpoint-adapters/related-prompts.endpoint-adapter.ts new file mode 100644 index 000000000..838f92e38 --- /dev/null +++ b/packages/x-adapter-platform/src/endpoint-adapters/related-prompts.endpoint-adapter.ts @@ -0,0 +1,24 @@ +import { endpointAdapterFactory, interpolate } from '@empathyco/x-adapter'; +import { RelatedPromptsRequest, RelatedPromptsResponse } from '@empathyco/x-types'; +import { relatedPromptsRequestMapper } from '../mappers/requests/related-prompts-request.mapper'; +import { relatedPromptsResponseMapper } from '../mappers/responses/related-prompts-response.mapper'; +import { getSearchServiceUrl } from './utils'; + +/** + * This endpoint does not support pagination in the request. + */ +export const relatedPromptsEndpointAdapter = endpointAdapterFactory< + RelatedPromptsRequest, + RelatedPromptsResponse +>({ + endpoint: from => + interpolate(`${getSearchServiceUrl(from)}/relatedprompts/{extraParams.instance}`, from), + requestMapper: relatedPromptsRequestMapper, + responseMapper: relatedPromptsResponseMapper, + defaultRequestOptions: { + id: 'related-prompts', + parameters: { + internal: true + } + } +}); diff --git a/packages/x-adapter-platform/src/mappers/requests/index.ts b/packages/x-adapter-platform/src/mappers/requests/index.ts index 986aa3c41..b31333be3 100644 --- a/packages/x-adapter-platform/src/mappers/requests/index.ts +++ b/packages/x-adapter-platform/src/mappers/requests/index.ts @@ -3,6 +3,7 @@ export * from './next-queries-request.mapper'; export * from './popular-searches-request.mapper'; export * from './query-suggestions-request.mapper'; export * from './recommendations-request.mapper'; +export * from './related-prompts-request.mapper'; export * from './related-tags-request.mapper'; export * from './search-request.mapper'; export * from './semantic-queries-request.mapper'; diff --git a/packages/x-adapter-platform/src/mappers/requests/related-prompts-request.mapper.ts b/packages/x-adapter-platform/src/mappers/requests/related-prompts-request.mapper.ts new file mode 100644 index 000000000..093125349 --- /dev/null +++ b/packages/x-adapter-platform/src/mappers/requests/related-prompts-request.mapper.ts @@ -0,0 +1,12 @@ +import { schemaMapperFactory } from '@empathyco/x-adapter'; +import { RelatedPromptsRequest } from '@empathyco/x-types'; +import { PlatformRelatedPromptsRequest } from '../../types/requests/related-prompts-request.model'; +import { relatedPromptsRequestSchema } from '../../schemas/requests/related-prompts-request.schema'; + +/** + * Default implementation for the RelatedPromptsRequestMapper. + */ +export const relatedPromptsRequestMapper = schemaMapperFactory< + RelatedPromptsRequest, + PlatformRelatedPromptsRequest +>(relatedPromptsRequestSchema); diff --git a/packages/x-adapter-platform/src/mappers/responses/index.ts b/packages/x-adapter-platform/src/mappers/responses/index.ts index 52e346971..8f51eaf87 100644 --- a/packages/x-adapter-platform/src/mappers/responses/index.ts +++ b/packages/x-adapter-platform/src/mappers/responses/index.ts @@ -3,6 +3,7 @@ export * from './next-queries-response.mapper'; export * from './query-suggestions-response.mapper'; export * from './popular-searches-response.mapper'; export * from './recommendations-response.mapper'; +export * from './related-prompts-response.mapper'; export * from './related-tags-response.mapper'; export * from './search-response.mapper'; export * from './semantic-queries-response.mapper'; diff --git a/packages/x-adapter-platform/src/mappers/responses/related-prompts-response.mapper.ts b/packages/x-adapter-platform/src/mappers/responses/related-prompts-response.mapper.ts new file mode 100644 index 000000000..869520f73 --- /dev/null +++ b/packages/x-adapter-platform/src/mappers/responses/related-prompts-response.mapper.ts @@ -0,0 +1,14 @@ +import { schemaMapperFactory } from '@empathyco/x-adapter'; +import { RelatedPromptsResponse } from '@empathyco/x-types'; +// eslint-disable-next-line max-len +import { PlatformRelatedPromptsResponse } from '../../types/responses/related-prompts-response.model'; +// eslint-disable-next-line max-len +import { relatedPromptsResponseSchema } from '../../schemas/responses/related-prompts-response.schema'; + +/** + * Default implementation for the RelatedPromptsResponseMapper. + */ +export const relatedPromptsResponseMapper = schemaMapperFactory< + PlatformRelatedPromptsResponse, + RelatedPromptsResponse +>(relatedPromptsResponseSchema); diff --git a/packages/x-adapter-platform/src/platform.adapter.ts b/packages/x-adapter-platform/src/platform.adapter.ts index a39523e2e..b7035cfa2 100644 --- a/packages/x-adapter-platform/src/platform.adapter.ts +++ b/packages/x-adapter-platform/src/platform.adapter.ts @@ -10,6 +10,7 @@ import { taggingEndpointAdapter } from './endpoint-adapters/tagging.endpoint-ada import { querySuggestionsEndpointAdapter } from './endpoint-adapters/query-suggestions.endpoint-adapter'; import { semanticQueriesEndpointAdapter } from './endpoint-adapters/semantic-queries.endpoint-adapter'; import { experienceControlsEndpointAdapter } from './endpoint-adapters/experience-controls.endpoint-adapter'; +import { relatedPromptsEndpointAdapter } from './endpoint-adapters/related-prompts.endpoint-adapter'; /* eslint-enable max-len */ /** @@ -23,7 +24,7 @@ export const platformAdapter: PlatformAdapter = { recommendations: recommendationsEndpointAdapter, nextQueries: nextQueriesEndpointAdapter, querySuggestions: querySuggestionsEndpointAdapter, - relatedPrompts: undefined, + relatedPrompts: relatedPromptsEndpointAdapter, relatedTags: relatedTagsEndpointAdapter, identifierResults: identifierResultsEndpointAdapter, tagging: taggingEndpointAdapter, diff --git a/packages/x-adapter-platform/src/schemas/models/index.ts b/packages/x-adapter-platform/src/schemas/models/index.ts index 8336035f2..22f4015ff 100644 --- a/packages/x-adapter-platform/src/schemas/models/index.ts +++ b/packages/x-adapter-platform/src/schemas/models/index.ts @@ -2,6 +2,7 @@ export * from './banner.schema'; export * from './facet.schema'; export * from './filters'; export * from './next-query.schema'; +export * from './related-prompt.schema'; export * from './related-tag.schema'; export * from './partial-results.schema'; export * from './promoted.schema'; diff --git a/packages/x-adapter-platform/src/schemas/models/related-prompt.schema.ts b/packages/x-adapter-platform/src/schemas/models/related-prompt.schema.ts new file mode 100644 index 000000000..531b67a66 --- /dev/null +++ b/packages/x-adapter-platform/src/schemas/models/related-prompt.schema.ts @@ -0,0 +1,13 @@ +import { createMutableSchema } from '@empathyco/x-adapter'; +import { RelatedPrompt } from '@empathyco/x-types'; +import { PlatformRelatedPrompt } from '../../types/models/related-prompt.model'; + +/** + * Default implementation for the RelatedPromptSchema. + */ +export const relatedPromptSchema = createMutableSchema({ + modelName: () => 'RelatedPrompt', + nextQueries: () => [], + suggestionText: 'suggestionText', + type: () => 'SYNTHETIC' +}); diff --git a/packages/x-adapter-platform/src/schemas/requests/index.ts b/packages/x-adapter-platform/src/schemas/requests/index.ts index 4d92a409f..2b8c2f5ba 100644 --- a/packages/x-adapter-platform/src/schemas/requests/index.ts +++ b/packages/x-adapter-platform/src/schemas/requests/index.ts @@ -2,6 +2,7 @@ export * from './identifier-results-request.schema'; export * from './next-queries-request.schema'; export * from './popular-searches-request.schema'; export * from './query-suggestions-request.schema'; +export * from './related-prompts-request.schema'; export * from './related-tags-request.schema'; export * from './recommendations-request.schema'; export * from './search-request.schema'; diff --git a/packages/x-adapter-platform/src/schemas/requests/related-prompts-request.schema.ts b/packages/x-adapter-platform/src/schemas/requests/related-prompts-request.schema.ts new file mode 100644 index 000000000..abc14613c --- /dev/null +++ b/packages/x-adapter-platform/src/schemas/requests/related-prompts-request.schema.ts @@ -0,0 +1,14 @@ +import { createMutableSchema } from '@empathyco/x-adapter'; +import { RelatedPromptsRequest } from '@empathyco/x-types'; +import { PlatformRelatedPromptsRequest } from '../../types/requests/related-prompts-request.model'; + +/** + * Default implementation for the RelatedPromptsRequestSchema. + */ +export const relatedPromptsRequestSchema = createMutableSchema< + RelatedPromptsRequest, + PlatformRelatedPromptsRequest +>({ + query: 'query', + extraParams: 'extraParams' +}); diff --git a/packages/x-adapter-platform/src/schemas/responses/index.ts b/packages/x-adapter-platform/src/schemas/responses/index.ts index 49ff504a2..52ad69461 100644 --- a/packages/x-adapter-platform/src/schemas/responses/index.ts +++ b/packages/x-adapter-platform/src/schemas/responses/index.ts @@ -2,6 +2,7 @@ export * from './identifier-results-response.schema'; export * from './next-queries-response.schema'; export * from './popular-searches-response.schema'; export * from './query-suggestions-response.schema'; +export * from './related-prompts-response.schema'; export * from './related-tags-response.schema'; export * from './recommendations-response.schema'; export * from './semantic-queries-response.schema'; diff --git a/packages/x-adapter-platform/src/schemas/responses/related-prompts-response.schema.ts b/packages/x-adapter-platform/src/schemas/responses/related-prompts-response.schema.ts new file mode 100644 index 000000000..46480429c --- /dev/null +++ b/packages/x-adapter-platform/src/schemas/responses/related-prompts-response.schema.ts @@ -0,0 +1,18 @@ +import { createMutableSchema } from '@empathyco/x-adapter'; +import { RelatedPromptsResponse } from '@empathyco/x-types'; +// eslint-disable-next-line max-len +import { PlatformRelatedPromptsResponse } from '../../types/responses/related-prompts-response.model'; +import { relatedPromptSchema } from '../models/related-prompt.schema'; + +/** + * Default implementation for the RelatedPromptsResponseSchema. + */ +export const relatedPromptsResponseSchema = createMutableSchema< + PlatformRelatedPromptsResponse, + RelatedPromptsResponse +>({ + relatedPrompts: { + $path: 'data.relatedprompts', + $subSchema: relatedPromptSchema + } +}); diff --git a/packages/x-adapter-platform/src/types/models/index.ts b/packages/x-adapter-platform/src/types/models/index.ts index 0a610d2bd..b75b8efac 100644 --- a/packages/x-adapter-platform/src/types/models/index.ts +++ b/packages/x-adapter-platform/src/types/models/index.ts @@ -4,6 +4,7 @@ export * from './next-query.model'; export * from './partials.model'; export * from './promoted.model'; export * from './redirection.model'; +export * from './related-prompt.model'; export * from './related-tag.model'; export * from './result.model'; export * from './semantic-query.model'; diff --git a/packages/x-adapter-platform/src/types/models/related-prompt.model.ts b/packages/x-adapter-platform/src/types/models/related-prompt.model.ts new file mode 100644 index 000000000..18a4186fb --- /dev/null +++ b/packages/x-adapter-platform/src/types/models/related-prompt.model.ts @@ -0,0 +1,8 @@ +/** + * Related prompt model for the `platform` API. + */ +export interface PlatformRelatedPrompt { + nextQueries: string[]; + suggestionText: string; + type: 'SYNTHETIC'; +} diff --git a/packages/x-adapter-platform/src/types/platform-adapter.types.ts b/packages/x-adapter-platform/src/types/platform-adapter.types.ts index 9c3a81e7a..d2c8ccfde 100644 --- a/packages/x-adapter-platform/src/types/platform-adapter.types.ts +++ b/packages/x-adapter-platform/src/types/platform-adapter.types.ts @@ -18,7 +18,9 @@ import { TaggingRequest, ExperienceControlsRequest, ExperienceControlsResponse, - XComponentsAdapter + XComponentsAdapter, + RelatedPromptsRequest, + RelatedPromptsResponse } from '@empathyco/x-types'; import { ExtendableEndpointAdapter } from '@empathyco/x-adapter'; @@ -33,7 +35,7 @@ export interface PlatformAdapter extends XComponentsAdapter { nextQueries: ExtendableEndpointAdapter; recommendations: ExtendableEndpointAdapter; querySuggestions: ExtendableEndpointAdapter; - relatedPrompts: any; + relatedPrompts: ExtendableEndpointAdapter; relatedTags: ExtendableEndpointAdapter; identifierResults: ExtendableEndpointAdapter; semanticQueries: ExtendableEndpointAdapter; diff --git a/packages/x-adapter-platform/src/types/requests/index.ts b/packages/x-adapter-platform/src/types/requests/index.ts index d527c1319..1728fde9b 100644 --- a/packages/x-adapter-platform/src/types/requests/index.ts +++ b/packages/x-adapter-platform/src/types/requests/index.ts @@ -3,6 +3,7 @@ export * from './next-queries-request.model'; export * from './popular-searches-request.model'; export * from './query-suggestions-request.model'; export * from './recommendations-request.model'; +export * from './related-prompts-request.model'; export * from './related-tags-request.model'; export * from './search-request.model'; export * from './semantic-queries-request.model'; diff --git a/packages/x-adapter-platform/src/types/requests/related-prompts-request.model.ts b/packages/x-adapter-platform/src/types/requests/related-prompts-request.model.ts new file mode 100644 index 000000000..ee2d94f63 --- /dev/null +++ b/packages/x-adapter-platform/src/types/requests/related-prompts-request.model.ts @@ -0,0 +1,10 @@ +import { PlatformExtraParamsRequest, PlatformQueryableRequest } from './request.types'; + +/** + * Request for the `related prompts` endpoint with `extra params`. + * + * @public + */ +export interface PlatformRelatedPromptsRequest + extends PlatformQueryableRequest, + PlatformExtraParamsRequest {} diff --git a/packages/x-adapter-platform/src/types/responses/index.ts b/packages/x-adapter-platform/src/types/responses/index.ts index f145e8418..a3f2e1f34 100644 --- a/packages/x-adapter-platform/src/types/responses/index.ts +++ b/packages/x-adapter-platform/src/types/responses/index.ts @@ -2,6 +2,7 @@ export * from './identifier-results-response.model'; export * from './query-suggestions-response.model'; export * from './next-queries-response.model'; export * from './popular-searches-response.model'; +export * from './related-prompts-response.model'; export * from './related-tags-response.model'; export * from './recommendations-response.model'; export * from './search-response.model'; diff --git a/packages/x-adapter-platform/src/types/responses/related-prompts-response.model.ts b/packages/x-adapter-platform/src/types/responses/related-prompts-response.model.ts new file mode 100644 index 000000000..1eb0be25f --- /dev/null +++ b/packages/x-adapter-platform/src/types/responses/related-prompts-response.model.ts @@ -0,0 +1,11 @@ +import { PlatformRelatedPrompt } from '../models/related-prompt.model'; + +/** + * Response for the `related prompts` endpoint. + */ +export interface PlatformRelatedPromptsResponse { + data: { + relatedprompts: PlatformRelatedPrompt[]; + }; + status: number; +}