Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: advertisement options #475

Merged
merged 3 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
2 changes: 1 addition & 1 deletion node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
42 changes: 26 additions & 16 deletions node/resolvers/search/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand All @@ -443,6 +450,7 @@ export const queries = {
const workspaceSearchParams = await getWorkspaceSearchParamsFromStorage(ctx)

const biggyArgs = {
...advertisementOptions,
...args,
sort: convertOrderBy(orderBy),
...workspaceSearchParams,
Expand Down Expand Up @@ -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),
Expand Down
14 changes: 13 additions & 1 deletion node/typings/Search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ enum IndexingType {
XML = 'XML',
}

interface SearchResultArgs {
interface SearchResultArgs extends AdvertisementOptions {
attributePath?: string
query?: string
page?: number
Expand Down Expand Up @@ -89,6 +89,13 @@ interface Options {
allowRedirect?: boolean
}

interface AdvertisementOptions {
showSponsored?: boolean
sponsoredCount?: number
repeatSponsoredProducts?: boolean
advertisementPlacement?: string
}

interface FacetsInput {
map: string
selectedFacets: SelectedFacet[]
Expand All @@ -101,6 +108,10 @@ interface FacetsInput {
categoryTreeBehavior: 'default' | 'show' | 'hide'
}

interface ProductsInput extends SearchArgs {
advertisementOptions?: AdvertisementOptions
}

interface ProductSearchInput {
query: string
from: number
Expand All @@ -117,6 +128,7 @@ interface ProductSearchInput {
map?: string
options?: Options
showSponsored?: boolean
advertisementOptions?: AdvertisementOptions
}

interface ElasticAttribute {
Expand Down
8 changes: 4 additions & 4 deletions node/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading