diff --git a/CHANGELOG.md b/CHANGELOG.md index af9d1dd4..765fe5c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Added + +- Pass `advertisementOptions` to Intelligent Search API on the `products` and `productSearch` queries. + ## [1.70.0] - 2024-06-10 ### Fix - `videos` in productSearch query - ## [1.69.0] - 2024-03-21 - Parameter `groupBy` into `recommendations` and `productRecommendations` resolvers and `groupByProduct` in `crossSelling` search client. diff --git a/node/package.json b/node/package.json index 0ed1c56b..8e3686ae 100644 --- a/node/package.json +++ b/node/package.json @@ -46,7 +46,7 @@ "@types/node": "^12.0.0", "@types/qs": "^6.5.1", "@types/ramda": "^0.26.21", - "@vtex/api": "6.46.1", + "@vtex/api": "6.47.0", "@vtex/tsconfig": "^0.6.0", "eslint": "^5.15.3", "eslint-config-vtex": "^10.1.0", diff --git a/node/resolvers/search/index.ts b/node/resolvers/search/index.ts index 48985eb7..bc26ffe9 100644 --- a/node/resolvers/search/index.ts +++ b/node/resolvers/search/index.ts @@ -3,40 +3,40 @@ import { UserInputError, createMessagesLoader, } from '@vtex/api' -import { head, isEmpty, isNil, test, pathOr } from 'ramda' +import { head, isEmpty, isNil, pathOr, test } from 'ramda' +import { + buildAttributePath, + convertOrderBy, +} from '../../commons/compatibility-layer' +import { getWorkspaceSearchParamsFromStorage } from '../../routes/workspaceSearchParams' +import { shouldTranslateToTenantLocale } from '../../utils/i18n' import { resolvers as assemblyOptionResolvers } from './assemblyOption' import { resolvers as autocompleteResolvers } from './autocomplete' import { resolvers as brandResolvers } from './brand' import { resolvers as categoryResolvers } from './category' +import { MAP_VALUES_SEP, PATH_SEPARATOR } from './constants' import { resolvers as discountResolvers } from './discount' import { resolvers as itemMetadataResolvers } from './itemMetadata' import { resolvers as itemMetadataPriceTableItemResolvers } from './itemMetadataPriceTableItem' import { resolvers as itemMetadataUnitResolvers } from './itemMetadataUnit' +import { getSearchMetaData } from './modules/metadata' +import { toCompatibilityArgs } from './newURLs' import { resolvers as offerResolvers } from './offer' import { resolvers as productResolvers } from './product' +import { resolvers as productPriceRangeResolvers } from './productPriceRange' import { resolvers as recommendationResolvers } from './recommendation' +import { resolvers as searchBreadcrumbResolvers } from './searchBreadcrumb' import { resolvers as skuResolvers } from './sku' import { resolvers as skuSpecificationResolver } from './skuSpecification' import { resolvers as skuSpecificationFieldResolver } from './skuSpecificationField' import { resolvers as skuSpecificationValueResolver } from './skuSpecificationValue' -import { resolvers as productPriceRangeResolvers } from './productPriceRange' -import { resolvers as searchBreadcrumbResolvers } from './searchBreadcrumb' -import { getSearchMetaData } from './modules/metadata' import { SearchCrossSellingTypes, getMapAndPriceRangeFromSelectedFacets, - validMapAndQuery, getShippingOptionsFromSelectedFacets, + validMapAndQuery, } from './utils' -import { toCompatibilityArgs } from './newURLs' -import { PATH_SEPARATOR, MAP_VALUES_SEP } from './constants' -import { shouldTranslateToTenantLocale } from '../../utils/i18n' -import { - buildAttributePath, - convertOrderBy, -} from '../../commons/compatibility-layer' -import { getWorkspaceSearchParamsFromStorage } from '../../routes/workspaceSearchParams' interface ProductIndentifier { field: 'id' | 'slug' | 'ean' | 'reference' | 'sku' value: string @@ -314,6 +314,12 @@ const buildSelectedFacets = (args: SearchArgs) => { return selectedFacets } +const defaultAdvertisementOptions: AdvertisementOptions = { + showSponsored: false, + sponsoredCount: 3, + repeatSponsoredProducts: true +} + export const queries = { autocomplete: async ( _: any, @@ -424,13 +430,14 @@ export const queries = { ) }, - products: async (_: any, args: SearchArgs, ctx: Context) => { + products: async (_: any, args: ProductsInput, ctx: Context) => { const { clients: { intelligentSearchApi }, } = ctx const { to, - orderBy + orderBy, + advertisementOptions = defaultAdvertisementOptions } = args if (to && to > 2500) { @@ -443,6 +450,7 @@ export const queries = { const workspaceSearchParams = await getWorkspaceSearchParamsFromStorage(ctx) const biggyArgs = { + ...advertisementOptions, ...args, sort: convertOrderBy(orderBy), ...workspaceSearchParams, @@ -516,12 +524,14 @@ export const queries = { const { intelligentSearchApi } = ctx.clients const { selectedFacets, - fullText + fullText, + advertisementOptions = defaultAdvertisementOptions } = args const workspaceSearchParams = await getWorkspaceSearchParamsFromStorage(ctx) const biggyArgs: {[key:string]: any} = { + ...advertisementOptions, ...args, query: fullText, sort: convertOrderBy(args.orderBy), diff --git a/node/typings/Search.ts b/node/typings/Search.ts index 716a8032..e6f7e0d1 100644 --- a/node/typings/Search.ts +++ b/node/typings/Search.ts @@ -23,7 +23,7 @@ enum IndexingType { XML = 'XML', } -interface SearchResultArgs { +interface SearchResultArgs extends AdvertisementOptions { attributePath?: string query?: string page?: number @@ -89,6 +89,13 @@ interface Options { allowRedirect?: boolean } +interface AdvertisementOptions { + showSponsored?: boolean + sponsoredCount?: number + repeatSponsoredProducts?: boolean + advertisementPlacement?: string +} + interface FacetsInput { map: string selectedFacets: SelectedFacet[] @@ -101,6 +108,10 @@ interface FacetsInput { categoryTreeBehavior: 'default' | 'show' | 'hide' } +interface ProductsInput extends SearchArgs { + advertisementOptions?: AdvertisementOptions +} + interface ProductSearchInput { query: string from: number @@ -117,6 +128,7 @@ interface ProductSearchInput { map?: string options?: Options showSponsored?: boolean + advertisementOptions?: AdvertisementOptions } interface ElasticAttribute { diff --git a/node/yarn.lock b/node/yarn.lock index dc79d503..7171e6c6 100644 --- a/node/yarn.lock +++ b/node/yarn.lock @@ -780,10 +780,10 @@ lodash.unescape "4.0.1" semver "5.5.0" -"@vtex/api@6.46.1": - version "6.46.1" - resolved "https://registry.yarnpkg.com/@vtex/api/-/api-6.46.1.tgz#55a8755ae48f5400e7f1ed1921cd547950bb7a2a" - integrity sha512-geoxVvyWoQpOQ70Zmx3M8SBkRoGOS/bp9Gy26M+iCue63jofVSwmFz1zf66EaHA1PKOJNRgQPFwY+oeDE1U2lQ== +"@vtex/api@6.47.0": + version "6.47.0" + resolved "https://registry.yarnpkg.com/@vtex/api/-/api-6.47.0.tgz#6910455d593d8bb76f1f4f2b7660023853fda35e" + integrity sha512-t9gt7Q89EMbSj3rLhho+49Fv+/lQgiy8EPVRgtmmXFp1J4v8hIAZF7GPjCPie111KVs4eG0gfZFpmhA5dafKNA== dependencies: "@types/koa" "^2.11.0" "@types/koa-compose" "^3.2.3"